Merge pull request #74 from cp6/Development

2.1.8 Development to main
This commit is contained in:
corbpie 2022-10-20 15:49:15 +11:00 committed by GitHub
commit 1c8ec5fc6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
48 changed files with 572 additions and 626 deletions

View File

@ -8,7 +8,7 @@ Despite what the name infers this self hosted web app isn't just for storing idl
a [YABs](https://github.com/masonr/yet-another-bench-script) output you can get disk & network speed values along with a [YABs](https://github.com/masonr/yet-another-bench-script) output you can get disk & network speed values along with
GeekBench 5 scores to do easier comparing and sorting. GeekBench 5 scores to do easier comparing and sorting.
[![Generic badge](https://img.shields.io/badge/version-2.1.7-blue.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/Laravel-9.0-red.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/PHP-8.1-purple.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/Bootstrap-5.1-pink.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/version-2.1.8-blue.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/Laravel-9.0-red.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/PHP-8.1-purple.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/Bootstrap-5.1-pink.svg)](https://shields.io/)
<img src="https://raw.githubusercontent.com/cp6/my-idlers/main/public/My%20Idlers%20logo.jpg" width="128" height="128" /> <img src="https://raw.githubusercontent.com/cp6/my-idlers/main/public/My%20Idlers%20logo.jpg" width="128" height="128" />
@ -20,7 +20,7 @@ GeekBench 5 scores to do easier comparing and sorting.
[Cloud Five Limited](https://cloud-v.net/) for providing the hosting for demo installation. [Cloud Five Limited](https://cloud-v.net/) for providing the hosting for demo installation.
## 2.1.7 changes (13th October 2022): ## 2.1.8 changes (20th October 2022):
#### You can no longer use the form to submit YABS results #### You can no longer use the form to submit YABS results
yabs.sh now has JSON formatted response and can POST the output directly from calling the script. yabs.sh now has JSON formatted response and can POST the output directly from calling the script.
@ -36,26 +36,18 @@ Example yabs.sh call to POST the result
#### Please run the following if updating from existing install: #### Please run the following if updating from existing install:
```shell ```shell
php artisan migrate
php artisan route:cache php artisan route:cache
php artisan cache:clear php artisan cache:clear
``` ```
* Added default order by (Change this in settings) * Added & implemented details footer blade component
* Added dual success & error response alert component * Added new index layout
* Added new response alert component into views * Updated domains, misc, reseller, seedboxes and shared use new index layout
* Added input parameters for `compareYabs()` * Updated validation for store and update
* Updated and fixed server_type and virt mix-ups * Updated `updatePricing()` to not need `$as_usd` parameter
* Updated views title `@section` layout * Updated labels assigned insert
* Updated cache timeframes * Updated order/sort by methods for pricing related columns
* Updated `RouteServiceProvider::HOME` for `'/'` * Removed add YABs button on servers index page
* Updated the server choose compare method
* Fixed update server ssh port
* Fixed server due in X days being null
* Removed unused with 'labels.label' in queries
* Removed unused welcome and dashboard views
* Removed dashboard redirect to / from routes file
* Removed now unused success & error alert components
## Requires ## Requires

View File

@ -34,9 +34,13 @@ class DNSController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'hostname' => 'required|min:2', 'hostname' => 'required|string|min:2',
'address' => 'required|min:2', 'address' => 'required|string|min:2',
'dns_type' => 'required' 'dns_type' => 'required|string',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
$dns_id = Str::random(8); $dns_id = Str::random(8);
@ -90,9 +94,13 @@ class DNSController extends Controller
public function update(Request $request, DNS $dn) public function update(Request $request, DNS $dn)
{ {
$request->validate([ $request->validate([
'hostname' => 'required|min:2', 'hostname' => 'required|string|min:2',
'address' => 'required|min:2', 'address' => 'required|string|min:2',
'dns_type' => 'required' 'dns_type' => 'required|string',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
$dn->update([ $dn->update([

View File

@ -34,11 +34,20 @@ class DomainsController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'domain' => 'required|min:2', 'domain' => 'required|string|min:2',
'extension' => 'required|min:2', 'extension' => 'required|string|min:2',
'provider_id' => 'numeric', 'ns1' => 'sometimes|nullable|min:2',
'ns2' => 'sometimes|nullable|min:2',
'ns3' => 'sometimes|nullable|min:2',
'provider_id' => 'integer',
'payment_term' => 'integer',
'price' => 'numeric', 'price' => 'numeric',
'next_due_date' => 'required|date' 'next_due_date' => 'required|date',
'owned_since' => 'sometimes|nullable|date',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
$domain_id = Str::random(8); $domain_id = Str::random(8);
@ -74,15 +83,24 @@ class DomainsController extends Controller
public function update(Request $request, Domains $domain) public function update(Request $request, Domains $domain)
{ {
$request->validate([ $request->validate([
'domain' => 'required|min:2', 'domain' => 'required|string|min:2',
'extension' => 'required|min:2', 'extension' => 'required|string|min:2',
'provider_id' => 'numeric', 'ns1' => 'sometimes|nullable|min:2',
'price' => 'numeric' 'ns2' => 'sometimes|nullable|min:2',
'ns3' => 'sometimes|nullable|min:2',
'provider_id' => 'integer',
'payment_term' => 'integer',
'price' => 'numeric',
'next_due_date' => 'required|date',
'owned_since' => 'sometimes|nullable|date',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
$pricing = new Pricing(); $pricing = new Pricing();
$as_usd = $pricing->convertToUSD($request->price, $request->currency); $pricing->updatePricing($domain->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
$pricing->updatePricing($domain->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date);
$domain->update([ $domain->update([
'domain' => $request->domain, 'domain' => $request->domain,

View File

@ -31,7 +31,8 @@ class IPsController extends Controller
{ {
$request->validate([ $request->validate([
'address' => 'required|ip|min:2', 'address' => 'required|ip|min:2',
'ip_type' => 'required' 'ip_type' => 'required|string|size:4',
'service_id' => 'required|string'
]); ]);
$ip_id = Str::random(8); $ip_id = Str::random(8);

View File

@ -25,7 +25,7 @@ class LabelsController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'label' => 'required|min:2' 'label' => 'required|string|min:2'
]); ]);
Labels::create([ Labels::create([

View File

@ -24,7 +24,7 @@ class LocationsController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'location_name' => 'required|min:2' 'location_name' => 'required|string|min:2'
]); ]);
Locations::create([ Locations::create([

View File

@ -32,9 +32,11 @@ class MiscController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'name' => 'required|min:3', 'name' => 'required|string|min:3',
'price' => 'required|numeric', 'price' => 'required|numeric',
'owned_since' => 'date', 'payment_term' => 'required|integer',
'currency' => 'required|string|size:3',
'owned_since' => 'sometimes|nullable|date',
'next_due_date' => 'required|date' 'next_due_date' => 'required|date'
]); ]);
@ -65,21 +67,22 @@ class MiscController extends Controller
public function update(Request $request, Misc $misc) public function update(Request $request, Misc $misc)
{ {
$request->validate([ $request->validate([
'name' => 'required', 'name' => 'required|string|min:3',
'owned_since' => 'date', 'price' => 'required|numeric',
'payment_term' => 'required|integer',
'currency' => 'required|string|size:3',
'owned_since' => 'sometimes|nullable|date',
'next_due_date' => 'required|date'
]); ]);
DB::table('misc_services') $misc->update([
->where('id', $misc->id)
->update([
'name' => $request->name, 'name' => $request->name,
'owned_since' => $request->owned_since, 'owned_since' => $request->owned_since,
'active' => (isset($request->is_active)) ? 1 : 0 'active' => (isset($request->is_active)) ? 1 : 0
]); ]);
$pricing = new Pricing(); $pricing = new Pricing();
$as_usd = $pricing->convertToUSD($request->price, $request->currency); $pricing->updatePricing($misc->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
$pricing->updatePricing($misc->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date);
Cache::forget("all_misc"); Cache::forget("all_misc");
Cache::forget("misc.{$misc->id}"); Cache::forget("misc.{$misc->id}");

View File

@ -22,7 +22,7 @@ class OsController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'os_name' => 'required|min:2' 'os_name' => 'required|string|min:2'
]); ]);
OS::create([ OS::create([

View File

@ -24,7 +24,7 @@ class ProvidersController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'provider_name' => 'required|min:2' 'provider_name' => 'required|string|min:2'
]); ]);
Providers::create([ Providers::create([

View File

@ -31,26 +31,27 @@ class ResellerController extends Controller
{ {
$request->validate([ $request->validate([
'domain' => 'required|min:4', 'domain' => 'required|min:4',
'reseller_type' => 'required', 'reseller_type' => 'required|string',
'dedicated_ip' => 'present', 'disk' => 'integer',
'accounts' => 'numeric', 'os_id' => 'integer',
'server_type' => 'numeric', 'provider_id' => 'integer',
'ram' => 'numeric', 'location_id' => 'integer',
'disk' => 'numeric',
'os_id' => 'numeric',
'provider_id' => 'numeric',
'location_id' => 'numeric',
'price' => 'numeric', 'price' => 'numeric',
'payment_term' => 'numeric', 'payment_term' => 'integer',
'was_promo' => 'numeric', 'was_promo' => 'integer',
'owned_since' => 'date', 'owned_since' => 'sometimes|nullable|date',
'domains' => 'numeric', 'accounts' => 'integer',
'sub_domains' => 'numeric', 'domains' => 'integer',
'bandwidth' => 'numeric', 'sub_domains' => 'integer',
'email' => 'numeric', 'bandwidth' => 'integer',
'ftp' => 'numeric', 'email' => 'integer',
'db' => 'numeric', 'ftp' => 'integer',
'next_due_date' => 'required|date' 'db' => 'integer',
'next_due_date' => 'required|date',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
$reseller_id = Str::random(8); $reseller_id = Str::random(8);
@ -106,30 +107,31 @@ class ResellerController extends Controller
public function update(Request $request, Reseller $reseller) public function update(Request $request, Reseller $reseller)
{ {
$request->validate([ $request->validate([
'id' => 'required|size:8',
'domain' => 'required|min:4', 'domain' => 'required|min:4',
'reseller_type' => 'required', 'reseller_type' => 'required|string',
'dedicated_ip' => 'present', 'disk' => 'integer',
'server_type' => 'numeric', 'os_id' => 'integer',
'disk' => 'numeric', 'provider_id' => 'integer',
'os_id' => 'numeric', 'location_id' => 'integer',
'provider_id' => 'numeric',
'location_id' => 'numeric',
'price' => 'numeric', 'price' => 'numeric',
'payment_term' => 'numeric', 'payment_term' => 'integer',
'was_promo' => 'numeric', 'was_promo' => 'integer',
'owned_since' => 'date', 'owned_since' => 'sometimes|nullable|date',
'domains' => 'numeric', 'accounts' => 'integer',
'sub_domains' => 'numeric', 'domains' => 'integer',
'bandwidth' => 'numeric', 'sub_domains' => 'integer',
'email' => 'numeric', 'bandwidth' => 'integer',
'ftp' => 'numeric', 'email' => 'integer',
'db' => 'numeric' 'ftp' => 'integer',
'db' => 'integer',
'next_due_date' => 'required|date',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
DB::table('reseller_hosting') $reseller->update([
->where('id', $request->id)
->update([
'main_domain' => $request->domain, 'main_domain' => $request->domain,
'reseller_type' => $request->reseller_type, 'reseller_type' => $request->reseller_type,
'provider_id' => $request->provider_id, 'provider_id' => $request->provider_id,
@ -148,8 +150,7 @@ class ResellerController extends Controller
]); ]);
$pricing = new Pricing(); $pricing = new Pricing();
$as_usd = $pricing->convertToUSD($request->price, $request->currency); $pricing->updatePricing($request->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
$pricing->updatePricing($request->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date);
Labels::deleteLabelsAssignedTo($request->id); Labels::deleteLabelsAssignedTo($request->id);
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $request->id); Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $request->id);

View File

@ -29,19 +29,23 @@ class SeedBoxesController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'title' => 'required|string', 'title' => 'required|string|min:2',
'hostname' => 'string|nullable', 'hostname' => 'sometimes|nullable|string|min:2',
'seed_box_type' => 'required', 'seed_box_type' => 'required|string',
'provider_id' => 'numeric', 'provider_id' => 'integer',
'location_id' => 'numeric', 'location_id' => 'integer',
'price' => 'numeric', 'price' => 'numeric',
'payment_term' => 'numeric', 'payment_term' => 'integer',
'was_promo' => 'numeric', 'was_promo' => 'integer',
'owned_since' => 'date', 'owned_since' => 'sometimes|nullable|date',
'disk' => 'numeric', 'disk' => 'integer',
'bandwidth' => 'numeric', 'bandwidth' => 'integer',
'port_speed' => 'numeric', 'port_speed' => 'integer',
'next_due_date' => 'required|date' 'next_due_date' => 'required|date',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
$seedbox_id = Str::random(8); $seedbox_id = Str::random(8);
@ -91,24 +95,26 @@ class SeedBoxesController extends Controller
public function update(Request $request, SeedBoxes $seedbox) public function update(Request $request, SeedBoxes $seedbox)
{ {
$request->validate([ $request->validate([
'id' => 'required|size:8', 'title' => 'required|string|min:2',
'title' => 'required|string', 'hostname' => 'sometimes|nullable|string|min:2',
'hostname' => 'string|nullable', 'seed_box_type' => 'required|string',
'seed_box_type' => 'required', 'provider_id' => 'integer',
'disk' => 'numeric', 'location_id' => 'integer',
'provider_id' => 'numeric',
'location_id' => 'numeric',
'price' => 'numeric', 'price' => 'numeric',
'payment_term' => 'numeric', 'payment_term' => 'integer',
'was_promo' => 'numeric', 'was_promo' => 'integer',
'owned_since' => 'date', 'owned_since' => 'sometimes|nullable|date',
'bandwidth' => 'numeric', 'disk' => 'integer',
'port_speed' => 'numeric' 'bandwidth' => 'integer',
'port_speed' => 'integer',
'next_due_date' => 'required|date',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
DB::table('seedboxes') $seedbox->update([
->where('id', $seedbox->id)
->update([
'title' => $request->title, 'title' => $request->title,
'hostname' => $request->hostname, 'hostname' => $request->hostname,
'seed_box_type' => $request->seed_box_type, 'seed_box_type' => $request->seed_box_type,
@ -124,8 +130,7 @@ class SeedBoxesController extends Controller
]); ]);
$pricing = new Pricing(); $pricing = new Pricing();
$as_usd = $pricing->convertToUSD($request->price, $request->currency); $pricing->updatePricing($seedbox->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
$pricing->updatePricing($seedbox->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date);
Labels::deleteLabelsAssignedTo($seedbox->id); Labels::deleteLabelsAssignedTo($seedbox->id);
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $seedbox->id); Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $seedbox->id);

View File

@ -18,9 +18,7 @@ class ServerController extends Controller
public function index() public function index()
{ {
$servers = Server::allActiveServers(); $servers = Server::allActiveServers();
$non_active_servers = Server::allNonActiveServers(); $non_active_servers = Server::allNonActiveServers();
return view('servers.index', compact(['servers', 'non_active_servers'])); return view('servers.index', compact(['servers', 'non_active_servers']));
} }
@ -43,22 +41,30 @@ class ServerController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'hostname' => 'required|min:5', 'hostname' => 'required|min:5',
'ip1' => 'nullable|ip', 'ip1' => 'sometimes|nullable|ip',
'ip2' => 'nullable|ip', 'ip2' => 'sometimes|nullable|ip',
'service_type' => 'numeric', 'ns1' => 'sometimes|nullable|string',
'server_type' => 'numeric', 'ns2' => 'sometimes|nullable|string',
'ram' => 'numeric', 'service_type' => 'integer',
'disk' => 'numeric', 'server_type' => 'integer',
'os_id' => 'numeric', 'ssh_port' => 'integer',
'provider_id' => 'numeric', 'bandwidth' => 'integer',
'location_id' => 'numeric', 'ram' => 'required|numeric',
'price' => 'numeric', 'disk' => 'required|integer',
'cpu' => 'numeric', 'os_id' => 'required|integer',
'was_promo' => 'numeric', 'provider_id' => 'required|integer',
'next_due_date' => 'required|date' 'location_id' => 'required|integer',
'price' => 'required|numeric',
'cpu' => 'required|integer',
'was_promo' => 'integer',
'next_due_date' => 'required|date',
'owned_since' => 'sometimes|nullable|date',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
$server_id = Str::random(8); $server_id = Str::random(8);
@ -123,22 +129,31 @@ class ServerController extends Controller
{ {
$request->validate([ $request->validate([
'hostname' => 'required|min:5', 'hostname' => 'required|min:5',
'ram' => 'numeric', 'ip1' => 'sometimes|nullable|ip',
'disk' => 'numeric', 'ip2' => 'sometimes|nullable|ip',
'os_id' => 'numeric', 'ns1' => 'sometimes|nullable|string',
'provider_id' => 'numeric', 'ns2' => 'sometimes|nullable|string',
'location_id' => 'numeric', 'service_type' => 'integer',
'price' => 'numeric', 'server_type' => 'integer',
'cpu' => 'numeric', 'ssh_port' => 'integer',
'was_promo' => 'numeric', 'bandwidth' => 'integer',
'next_due_date' => 'date' 'ram' => 'required|numeric',
'disk' => 'required|integer',
'os_id' => 'required|integer',
'provider_id' => 'required|integer',
'location_id' => 'required|integer',
'price' => 'required|numeric',
'cpu' => 'required|integer',
'was_promo' => 'integer',
'next_due_date' => 'required|date',
'owned_since' => 'sometimes|nullable|date',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
$server_id = $request->server_id; $server->update([
DB::table('servers')
->where('id', $server_id)
->update([
'hostname' => $request->hostname, 'hostname' => $request->hostname,
'server_type' => $request->server_type, 'server_type' => $request->server_type,
'os_id' => $request->os_id, 'os_id' => $request->os_id,
@ -161,11 +176,10 @@ class ServerController extends Controller
'show_public' => (isset($request->show_public)) ? 1 : 0 'show_public' => (isset($request->show_public)) ? 1 : 0
]); ]);
$server_id = $request->server_id;
$pricing = new Pricing(); $pricing = new Pricing();
$pricing->updatePricing($server_id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
$as_usd = $pricing->convertToUSD($request->price, $request->currency);
$pricing->updatePricing($server_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date);
Labels::deleteLabelsAssignedTo($server_id); Labels::deleteLabelsAssignedTo($server_id);
@ -209,7 +223,7 @@ class ServerController extends Controller
{//NOTICE: Selecting servers is not cached yet {//NOTICE: Selecting servers is not cached yet
$all_servers = Server::where('has_yabs', 1)->get(); $all_servers = Server::where('has_yabs', 1)->get();
if (isset($all_servers[1])){ if (isset($all_servers[1])) {
return view('servers.choose-compare', compact('all_servers')); return view('servers.choose-compare', compact('all_servers'));
} }

View File

@ -29,24 +29,26 @@ class SharedController extends Controller
{ {
$request->validate([ $request->validate([
'domain' => 'required|min:4', 'domain' => 'required|min:4',
'shared_type' => 'required', 'shared_type' => 'required|string',
'server_type' => 'numeric', 'disk' => 'integer',
'ram' => 'numeric', 'os_id' => 'integer',
'disk' => 'numeric', 'provider_id' => 'integer',
'os_id' => 'numeric', 'location_id' => 'integer',
'provider_id' => 'numeric',
'location_id' => 'numeric',
'price' => 'numeric', 'price' => 'numeric',
'payment_term' => 'numeric', 'payment_term' => 'integer',
'was_promo' => 'numeric', 'was_promo' => 'integer',
'owned_since' => 'date', 'owned_since' => 'sometimes|nullable|date',
'domains' => 'numeric', 'domains' => 'integer',
'sub_domains' => 'numeric', 'sub_domains' => 'integer',
'bandwidth' => 'numeric', 'bandwidth' => 'integer',
'email' => 'numeric', 'email' => 'integer',
'ftp' => 'numeric', 'ftp' => 'integer',
'db' => 'numeric', 'db' => 'integer',
'next_due_date' => 'required|date' 'next_due_date' => 'required|date',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
$shared_id = Str::random(8); $shared_id = Str::random(8);
@ -103,30 +105,30 @@ class SharedController extends Controller
public function update(Request $request, Shared $shared) public function update(Request $request, Shared $shared)
{ {
$request->validate([ $request->validate([
'id' => 'required|size:8',
'domain' => 'required|min:4', 'domain' => 'required|min:4',
'shared_type' => 'required', 'shared_type' => 'required|string',
'dedicated_ip' => 'present', 'disk' => 'integer',
'server_type' => 'numeric', 'os_id' => 'integer',
'disk' => 'numeric', 'provider_id' => 'integer',
'os_id' => 'numeric', 'location_id' => 'integer',
'provider_id' => 'numeric',
'location_id' => 'numeric',
'price' => 'numeric', 'price' => 'numeric',
'payment_term' => 'numeric', 'payment_term' => 'integer',
'was_promo' => 'numeric', 'was_promo' => 'integer',
'owned_since' => 'date', 'owned_since' => 'sometimes|nullable|date',
'domains' => 'numeric', 'domains' => 'integer',
'sub_domains' => 'numeric', 'sub_domains' => 'integer',
'bandwidth' => 'numeric', 'bandwidth' => 'integer',
'email' => 'numeric', 'email' => 'integer',
'ftp' => 'numeric', 'ftp' => 'integer',
'db' => 'numeric' 'db' => 'integer',
'next_due_date' => 'required|date',
'label1' => 'sometimes|nullable|string',
'label2' => 'sometimes|nullable|string',
'label3' => 'sometimes|nullable|string',
'label4' => 'sometimes|nullable|string',
]); ]);
DB::table('shared_hosting') $shared->update([
->where('id', $request->id)
->update([
'main_domain' => $request->domain, 'main_domain' => $request->domain,
'shared_type' => $request->shared_type, 'shared_type' => $request->shared_type,
'provider_id' => $request->provider_id, 'provider_id' => $request->provider_id,
@ -145,8 +147,7 @@ class SharedController extends Controller
]); ]);
$pricing = new Pricing(); $pricing = new Pricing();
$as_usd = $pricing->convertToUSD($request->price, $request->currency); $pricing->updatePricing($request->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
$pricing->updatePricing($request->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date);
Labels::deleteLabelsAssignedTo($request->id); Labels::deleteLabelsAssignedTo($request->id);
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $request->id); Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $request->id);

View File

@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
class Domains extends Model class Domains extends Model
{ {
@ -23,7 +24,12 @@ class Domains extends Model
public static function allDomains() public static function allDomains()
{//All domains and relationships (no using joins) {//All domains and relationships (no using joins)
return Cache::remember("all_domains", now()->addMonth(1), function () { return Cache::remember("all_domains", now()->addMonth(1), function () {
return Domains::with(['provider', 'price', 'labels'])->get(); $query = Domains::with(['provider', 'price', 'labels']);
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
$options = Settings::orderByProcess(Session::get('sort_on'));
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "domains.id"), $options[1]);
}
return $query->get();
}); });
} }

View File

@ -33,7 +33,7 @@ class Labels extends Model
{ {
for ($i = 1; $i <= 4; $i++) { for ($i = 1; $i <= 4; $i++) {
if (!is_null($labels_array[($i - 1)])) { if (!is_null($labels_array[($i - 1)])) {
DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $service_id]); DB::table('labels_assigned')->insert(['label_id' => $labels_array[($i - 1)], 'service_id' => $service_id]);
} }
} }
} }

View File

@ -35,7 +35,12 @@ class Misc extends Model
public static function allMisc() public static function allMisc()
{//All misc and relationships (no using joins) {//All misc and relationships (no using joins)
return Cache::remember("all_misc", now()->addMonth(1), function () { return Cache::remember("all_misc", now()->addMonth(1), function () {
return Misc::with(['price'])->get(); $query = Misc::with(['price']);
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
$options = Settings::orderByProcess(Session::get('sort_on'));
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "misc_services.id"), $options[1]);
}
return $query->get();
}); });
} }
@ -49,9 +54,6 @@ class Misc extends Model
public function price() public function price()
{ {
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
return $this->hasOne(Pricing::class, 'service_id', 'id')->orderBy(Settings::orderByProcess(Session::get('sort_on'))[0], Settings::orderByProcess(Session::get('sort_on'))[1]);
}
return $this->hasOne(Pricing::class, 'service_id', 'id'); return $this->hasOne(Pricing::class, 'service_id', 'id');
} }

View File

@ -48,7 +48,7 @@ class Pricing extends Model
private static function getRates($currency): float private static function getRates($currency): float
{ {
$rate = self::refreshRates()->$currency; $rate = self::refreshRates()->$currency;
return $rate === null ? 1.00 : $rate; return $rate ?? 1.00;
} }
public static function getCurrencyList(): array public static function getCurrencyList(): array
@ -125,8 +125,9 @@ class Pricing extends Model
]); ]);
} }
public function updatePricing(string $service_id, string $currency, float $price, int $term, float $as_usd, string $next_due_date, int $is_active = 1): int public function updatePricing(string $service_id, string $currency, float $price, int $term, string $next_due_date, int $is_active = 1): int
{ {
$as_usd = $this->convertToUSD($price, $currency);
return DB::table('pricings') return DB::table('pricings')
->where('service_id', $service_id) ->where('service_id', $service_id)
->update([ ->update([
@ -136,15 +137,14 @@ class Pricing extends Model
'as_usd' => $as_usd, 'as_usd' => $as_usd,
'usd_per_month' => $this->costAsPerMonth($as_usd, $term), 'usd_per_month' => $this->costAsPerMonth($as_usd, $term),
'next_due_date' => $next_due_date, 'next_due_date' => $next_due_date,
'active' => ($is_active) ? 1 : 0 'active' => $is_active
]); ]);
} }
public static function allPricing() public static function allPricing()
{ {
return Cache::remember('all_pricing', now()->addWeek(1), function () { return Cache::remember('all_pricing', now()->addWeek(1), function () {
return DB::table('pricings') return Pricing::get();
->get();
}); });
} }

View File

@ -36,7 +36,12 @@ class Reseller extends Model
public static function allResellerHosting() public static function allResellerHosting()
{//All reseller hosting and relationships (no using joins) {//All reseller hosting and relationships (no using joins)
return Cache::remember("all_reseller", now()->addMonth(1), function () { return Cache::remember("all_reseller", now()->addMonth(1), function () {
return Reseller::with(['location', 'provider', 'price', 'ips', 'labels'])->get(); $query = Reseller::with(['location', 'provider', 'price', 'ips', 'labels']);
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
$options = Settings::orderByProcess(Session::get('sort_on'));
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "reseller_hosting.id"), $options[1]);
}
return $query->get();
}); });
} }
@ -65,9 +70,6 @@ class Reseller extends Model
public function price() public function price()
{ {
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
return $this->hasOne(Pricing::class, 'service_id', 'id')->orderBy(Settings::orderByProcess(Session::get('sort_on'))[0], Settings::orderByProcess(Session::get('sort_on'))[1]);
}
return $this->hasOne(Pricing::class, 'service_id', 'id'); return $this->hasOne(Pricing::class, 'service_id', 'id');
} }

View File

@ -36,7 +36,12 @@ class SeedBoxes extends Model
public static function allSeedboxes() public static function allSeedboxes()
{//All seedboxes and relationships (no using joins) {//All seedboxes and relationships (no using joins)
return Cache::remember("all_seedboxes", now()->addMonth(1), function () { return Cache::remember("all_seedboxes", now()->addMonth(1), function () {
return SeedBoxes::with(['location', 'provider', 'price'])->get(); $query = SeedBoxes::with(['location', 'provider', 'price']);
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
$options = Settings::orderByProcess(Session::get('sort_on'));
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "seedboxes.id"), $options[1]);
}
return $query->get();
}); });
} }
@ -60,9 +65,6 @@ class SeedBoxes extends Model
public function price() public function price()
{ {
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
return $this->hasOne(Pricing::class, 'service_id', 'id')->orderBy(Settings::orderByProcess(Session::get('sort_on'))[0], Settings::orderByProcess(Session::get('sort_on'))[1]);
}
return $this->hasOne(Pricing::class, 'service_id', 'id'); return $this->hasOne(Pricing::class, 'service_id', 'id');
} }

View File

@ -43,7 +43,12 @@ class Server extends Model
public static function allServers() public static function allServers()
{//All servers and relationships (no using joins) {//All servers and relationships (no using joins)
return Cache::remember("all_servers", now()->addMonth(1), function () { return Cache::remember("all_servers", now()->addMonth(1), function () {
return Server::with(['location', 'provider', 'os', 'price', 'ips', 'yabs', 'yabs.disk_speed', 'yabs.network_speed', 'labels'])->get(); $query = Server::with(['location', 'provider', 'os', 'price', 'ips', 'yabs', 'yabs.disk_speed', 'yabs.network_speed', 'labels']);
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
$options = Settings::orderByProcess(Session::get('sort_on'));
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "servers.id"), $options[1]);
}
return $query->get();
}); });
} }
@ -58,8 +63,13 @@ class Server extends Model
public static function allActiveServers() public static function allActiveServers()
{//All ACTIVE servers and relationships replaces activeServersDataIndexPage() {//All ACTIVE servers and relationships replaces activeServersDataIndexPage()
return Cache::remember("all_active_servers", now()->addMonth(1), function () { return Cache::remember("all_active_servers", now()->addMonth(1), function () {
return Server::where('active', '=', 1) $query = Server::where('active', '=', 1)
->with(['location', 'provider', 'os', 'ips', 'yabs', 'yabs.disk_speed', 'yabs.network_speed', 'labels', 'price'])->get(); ->with(['location', 'provider', 'os', 'ips', 'yabs', 'yabs.disk_speed', 'yabs.network_speed', 'labels', 'price']);
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
$options = Settings::orderByProcess(Session::get('sort_on'));
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "servers.id"), $options[1]);
}
return $query->get();
}); });
} }
@ -216,9 +226,6 @@ class Server extends Model
public function price() public function price()
{ {
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
return $this->hasOne(Pricing::class, 'service_id', 'id')->orderBy(Settings::orderByProcess(Session::get('sort_on'))[0], Settings::orderByProcess(Session::get('sort_on'))[1]);
}
return $this->hasOne(Pricing::class, 'service_id', 'id'); return $this->hasOne(Pricing::class, 'service_id', 'id');
} }

View File

@ -36,7 +36,12 @@ class Shared extends Model
public static function allSharedHosting() public static function allSharedHosting()
{//All shared hosting and relationships (no using joins) {//All shared hosting and relationships (no using joins)
return Cache::remember("all_shared", now()->addMonth(1), function () { return Cache::remember("all_shared", now()->addMonth(1), function () {
return Shared::with(['location', 'provider', 'price', 'ips', 'labels'])->get(); $query = Shared::with(['location', 'provider', 'price', 'ips', 'labels']);
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
$options = Settings::orderByProcess(Session::get('sort_on'));
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "shared_hosting.id"), $options[1]);
}
return $query->get();
}); });
} }
@ -65,9 +70,6 @@ class Shared extends Model
public function price() public function price()
{ {
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
return $this->hasOne(Pricing::class, 'service_id', 'id')->orderBy(Settings::orderByProcess(Session::get('sort_on'))[0], Settings::orderByProcess(Session::get('sort_on'))[1]);
}
return $this->hasOne(Pricing::class, 'service_id', 'id'); return $this->hasOne(Pricing::class, 'service_id', 'id');
} }

View File

@ -46,10 +46,6 @@
</div> </div>
</form> </form>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>@if(isset($timer))@endif Built on
Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
</x-app-layout> </x-app-layout>

View File

@ -0,0 +1,4 @@
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1)
<p class="text-muted mt-4 text-end"><small>Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP
v{{ PHP_VERSION }})</small></p>
@endif

View File

@ -8,10 +8,10 @@
showModal: false showModal: false
}, },
methods: { methods: {
modalForm(event) { confirmDeleteModal(event) {
this.showModal = true; this.showModal = true;
this.modal_hostname = event.target.id.replace('btn-', ''); this.modal_hostname = event.target.title;
this.modal_id = event.target.title; this.modal_id = event.target.id;
this.delete_form_action = '{{$uri}}/' + this.modal_id; this.delete_form_action = '{{$uri}}/' + this.modal_id;
} }
} }

View File

@ -42,8 +42,8 @@
<i class="fas fa-pen" title="edit"></i></a> <i class="fas fa-pen" title="edit"></i></a>
@csrf @csrf
@method('DELETE') @method('DELETE')
<i class="fas fa-trash text-danger ms-3" @click="modalForm" <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
id="btn-{{$dns->hostname}}" title="{{$dns->id}}"></i> id="{{$dns->id}}" title="{{$dns->hostname}}"></i>
</form> </form>
</td> </td>
</tr> </tr>
@ -57,12 +57,7 @@
</table> </table>
</div> </div>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
<x-modal-delete-script> <x-modal-delete-script>
<x-slot name="uri">dns</x-slot> <x-slot name="uri">dns</x-slot>

View File

@ -1,15 +1,12 @@
@section("title", "Domains") @extends('layouts.index')
@section('style') @section('title', 'Domains')
@section('css_style')
<x-modal-style></x-modal-style> <x-modal-style></x-modal-style>
@endsection @endsection
@section('scripts') @section('header')
<script src="{{ asset('js/vue.min.js') }}"></script>
<script src="{{ asset('js/axios.min.js') }}"></script>
@endsection
<x-app-layout>
<x-slot name="header">
{{ __('Domains') }} {{ __('Domains') }}
</x-slot> @endsection
@section('content')
<div class="container" id="app"> <div class="container" id="app">
<x-delete-confirm-modal></x-delete-confirm-modal> <x-delete-confirm-modal></x-delete-confirm-modal>
<x-card class="shadow mt-3"> <x-card class="shadow mt-3">
@ -32,12 +29,14 @@
@foreach($domains as $domain) @foreach($domains as $domain)
<tr> <tr>
<td class="text-nowrap"><a href="https://{{ $domain->domain }}.{{$domain->extension}}" <td class="text-nowrap"><a href="https://{{ $domain->domain }}.{{$domain->extension}}"
class="text-decoration-none">{{ $domain->domain }}.{{$domain->extension}}</a></td> class="text-decoration-none">{{ $domain->domain }}
.{{$domain->extension}}</a></td>
<td class="text-nowrap">{{ $domain->owned_since}}</td> <td class="text-nowrap">{{ $domain->owned_since}}</td>
<td class="text-nowrap">{{ now()->diffInDays($domain->price->next_due_date) }} <small>days</small> <td class="text-nowrap">{{ now()->diffInDays($domain->price->next_due_date) }} <small>days</small>
</td> </td>
<td class="text-nowrap">{{ $domain->provider->name}}</td> <td class="text-nowrap">{{ $domain->provider->name}}</td>
<td class="text-nowrap">{{ $domain->price->price }} <small>{{$domain->price->currency}}</small></td> <td class="text-nowrap">{{ $domain->price->price }}
<small>{{$domain->price->currency}}</small></td>
<td class="text-nowrap"> <td class="text-nowrap">
<form action="{{ route('domains.destroy', $domain->id) }}" method="POST"> <form action="{{ route('domains.destroy', $domain->id) }}" method="POST">
<a href="{{ route('domains.show', $domain->id) }}" <a href="{{ route('domains.show', $domain->id) }}"
@ -48,8 +47,8 @@
<i class="fas fa-pen" title="edit"></i></a> <i class="fas fa-pen" title="edit"></i></a>
@csrf @csrf
@method('DELETE') @method('DELETE')
<i class="fas fa-trash text-danger ms-3" @click="modalForm" <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
id="btn-{{$domain->domain}}" title="{{$domain->id}}"></i> id="{{$domain->id}}" title="{{$domain->domain}}"></i>
</form> </form>
</td> </td>
</tr> </tr>
@ -63,14 +62,9 @@
</table> </table>
</div> </div>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
<x-modal-delete-script> <x-modal-delete-script>
<x-slot name="uri">domains</x-slot> <x-slot name="uri">domains</x-slot>
</x-modal-delete-script> </x-modal-delete-script>
</x-app-layout> @endsection

View File

@ -41,8 +41,8 @@
<form action="{{ route('IPs.destroy', $ip->id) }}" method="POST"> <form action="{{ route('IPs.destroy', $ip->id) }}" method="POST">
@csrf @csrf
@method('DELETE') @method('DELETE')
<i class="fas fa-trash text-danger ms-3" @click="modalForm" <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
id="btn-{{$ip->hostname}}" title="{{$ip->id}}"></i> id="{{$ip->id}}" title="{{$ip->hostname}}"></i>
</form> </form>
</td> </td>
</tr> </tr>
@ -56,12 +56,7 @@
</table> </table>
</div> </div>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
<x-datatables-assets></x-datatables-assets> <x-datatables-assets></x-datatables-assets>
<script type="text/javascript"> <script type="text/javascript">

View File

@ -36,8 +36,8 @@
class="text-body mx-1"> class="text-body mx-1">
<i class="fas fa-eye" title="view"></i></a> <i class="fas fa-eye" title="view"></i></a>
@csrf @csrf
<i class="fas fa-trash text-danger ms-3" @click="modalForm" <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
id="btn-{{$label->label}}" title="{{$label->id}}"></i> id="{{$label->id}}" title="{{$label->label}}"></i>
</form> </form>
</td> </td>
</tr> </tr>
@ -50,12 +50,7 @@
</tbody> </tbody>
</table> </table>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
<x-datatables-assets></x-datatables-assets> <x-datatables-assets></x-datatables-assets>
<script type="text/javascript"> <script type="text/javascript">
@ -75,6 +70,6 @@
}); });
</script> </script>
<x-modal-delete-script> <x-modal-delete-script>
<x-slot name="uri">locations</x-slot> <x-slot name="uri">labels</x-slot>
</x-modal-delete-script> </x-modal-delete-script>
</x-app-layout> </x-app-layout>

View File

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
@if(isset(Auth::user()->api_token))
<meta name="api_token" content="{{ Auth::user()->api_token }}">
@endif
<title>@yield('title') - @if (config()->has('app.name')){{ config('app.name') }} @else My idlers @endif</title>
@if(Session::get('dark_mode'))
<link rel="stylesheet" href="{{ asset('css/bootstrap-dark.min.css') }}">
@else
<link rel="stylesheet" href="{{ asset('css/bootstrap.min.css') }}">
@endif
<link rel="stylesheet" href="{{ asset('css/fa.min.css') }}">
@yield('css_style')
<script src="{{ asset('js/vue.min.js') }}"></script>
</head>
<body class="font-sans antialiased">
<div class="container-fluid">
@include('layouts.navigation')
</div>
<div class="container">
<h3 class="ms-2 mt-3">
@yield('header')
</h3>
</div>
<div class="container">
@yield('content')
</div>
<script src="{{ asset('js/bootstrap.min.js') }}" defer></script>
@yield('scripts')
</body>
</html>

View File

@ -49,12 +49,7 @@
</tbody> </tbody>
</table> </table>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
<x-datatables-assets></x-datatables-assets> <x-datatables-assets></x-datatables-assets>
<script type="text/javascript"> <script type="text/javascript">

View File

@ -1,15 +1,12 @@
@section("title", "Misc services") @extends('layouts.index')
@section('style') @section('title', 'Misc')
@section('css_style')
<x-modal-style></x-modal-style> <x-modal-style></x-modal-style>
@endsection @endsection
@section('scripts') @section('header')
<script src="{{ asset('js/vue.min.js') }}"></script> {{ __('Misc') }}
<script src="{{ asset('js/axios.min.js') }}"></script>
@endsection @endsection
<x-app-layout> @section('content')
<x-slot name="header">
{{ __('Misc services') }}
</x-slot>
<div class="container" id="app"> <div class="container" id="app">
<x-delete-confirm-modal></x-delete-confirm-modal> <x-delete-confirm-modal></x-delete-confirm-modal>
<x-card class="shadow mt-3"> <x-card class="shadow mt-3">
@ -51,8 +48,8 @@
</a> </a>
@csrf @csrf
@method('DELETE') @method('DELETE')
<i class="fas fa-trash text-danger ms-3" @click="modalForm" <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
id="btn-{{$m->name}}" title="{{$m->id}}"></i> id="{{$m->id}}" title="{{$m->name}}"></i>
</form> </form>
</td> </td>
</tr> </tr>
@ -66,14 +63,9 @@
</table> </table>
</div> </div>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
<x-modal-delete-script> <x-modal-delete-script>
<x-slot name="uri">misc</x-slot> <x-slot name="uri">misc</x-slot>
</x-modal-delete-script> </x-modal-delete-script>
</x-app-layout> @endsection

View File

@ -32,8 +32,8 @@
<td class="text-nowrap">{{ $o->name }}</td> <td class="text-nowrap">{{ $o->name }}</td>
<td class="text-nowrap"> <td class="text-nowrap">
<form action="{{ route('locations.destroy', $o->id) }}" method="POST"> <form action="{{ route('locations.destroy', $o->id) }}" method="POST">
<i class="fas fa-trash text-danger ms-3" @click="modalForm" <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
id="btn-{{$o->name}}" title="{{$o->id}}"></i> id="{{$o->id}}" title="{{$o->name}}"></i>
</form> </form>
</td> </td>
</tr> </tr>
@ -46,12 +46,7 @@
</tbody> </tbody>
</table> </table>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
<x-datatables-assets></x-datatables-assets> <x-datatables-assets></x-datatables-assets>
<script type="text/javascript"> <script type="text/javascript">

View File

@ -35,8 +35,8 @@
<a href="{{ route('providers.show', $provider->id) }}" <a href="{{ route('providers.show', $provider->id) }}"
class="text-body mx-1"> class="text-body mx-1">
<i class="fas fa-eye" title="view"></i></a> <i class="fas fa-eye" title="view"></i></a>
<i class="fas fa-trash text-danger ms-3" @click="modalForm" <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
id="btn-{{$provider->name}}" title="{{$provider->id}}"></i> id="{{$provider->id}}" title="{{$provider->name}}"></i>
</form> </form>
</td> </td>
</tr> </tr>
@ -49,10 +49,7 @@
</tbody> </tbody>
</table> </table>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>Built on Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
<x-datatables-assets></x-datatables-assets> <x-datatables-assets></x-datatables-assets>
<script type="text/javascript"> <script type="text/javascript">

View File

@ -1,16 +1,12 @@
@section("title", "Resellers") @extends('layouts.index')
@section('style') @section('title', 'Resellers')
@section('css_style')
<x-modal-style></x-modal-style> <x-modal-style></x-modal-style>
@endsection @endsection
@section('scripts') @section('header')
<script src="{{ asset('js/vue.min.js') }}"></script>
<script src="{{ asset('js/axios.min.js') }}"></script>
@endsection
<x-app-layout>
<x-slot name="header">
{{ __('Reseller') }} {{ __('Reseller') }}
</x-slot> @endsection
@section('content')
<div class="container" id="app"> <div class="container" id="app">
<x-delete-confirm-modal></x-delete-confirm-modal> <x-delete-confirm-modal></x-delete-confirm-modal>
<div class="card shadow mt-3"> <div class="card shadow mt-3">
@ -73,30 +69,9 @@
</div> </div>
</div> </div>
</div> </div>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
<script> <x-modal-delete-script>
let app = new Vue({ <x-slot name="uri">reseller</x-slot>
el: "#app", </x-modal-delete-script>
data: { @endsection
"modal_hostname": '',
"modal_id": '',
"delete_form_action": '',
showModal: false
},
methods: {
confirmDeleteModal(event) {
this.showModal = true;
this.modal_hostname = event.target.title;
this.modal_id = event.target.id;
this.delete_form_action = 'reseller/' + this.modal_id;
}
}
});
</script>
</x-app-layout>

View File

@ -145,11 +145,6 @@
<x-slot name="route">{{ route('reseller.edit', $reseller->id) }}</x-slot> <x-slot name="route">{{ route('reseller.edit', $reseller->id) }}</x-slot>
</x-edit-btn> </x-edit-btn>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
</x-app-layout> </x-app-layout>

View File

@ -1,15 +1,12 @@
@section("title", "Seed boxes") @extends('layouts.index')
@section('style') @section('title', 'Seed boxes')
@section('css_style')
<x-modal-style></x-modal-style> <x-modal-style></x-modal-style>
@endsection @endsection
@section('scripts') @section('header')
<script src="{{ asset('js/vue.min.js') }}"></script>
<script src="{{ asset('js/axios.min.js') }}"></script>
@endsection
<x-app-layout>
<x-slot name="header">
{{ __('Seed boxes') }} {{ __('Seed boxes') }}
</x-slot> @endsection
@section('content')
<div class="container" id="app"> <div class="container" id="app">
<x-delete-confirm-modal></x-delete-confirm-modal> <x-delete-confirm-modal></x-delete-confirm-modal>
<div class="card shadow mt-3"> <div class="card shadow mt-3">
@ -96,29 +93,9 @@
</div> </div>
</div> </div>
</div> </div>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>Built on Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
<x-modal-delete-script>
<script> <x-slot name="uri">seedboxes</x-slot>
let app = new Vue({ </x-modal-delete-script>
el: "#app", @endsection
data: {
"modal_hostname": '',
"modal_id": '',
"delete_form_action": '',
showModal: false
},
methods: {
confirmDeleteModal(event) {
this.showModal = true;
this.modal_hostname = event.target.title;
this.modal_id = event.target.id;
this.delete_form_action = 'seedboxes/' + this.modal_id;
}
}
});
</script>
</x-app-layout>

View File

@ -129,11 +129,6 @@
<x-slot name="route">{{ route('seedboxes.edit', $seedbox_data->id) }}</x-slot> <x-slot name="route">{{ route('seedboxes.edit', $seedbox_data->id) }}</x-slot>
</x-edit-btn> </x-edit-btn>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
</x-app-layout> </x-app-layout>

View File

@ -43,10 +43,7 @@
@endif @endif
</div> </div>
</div> </div>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>Built on Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
<script type="application/javascript"> <script type="application/javascript">
let app = new Vue({ let app = new Vue({

View File

@ -95,10 +95,7 @@
<div class="tab-pane fade" id="non-active" role="tabpanel" aria-labelledby="non-active-tab"> <div class="tab-pane fade" id="non-active" role="tabpanel" aria-labelledby="non-active-tab">
</div> </div>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>Built on Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
<script> <script>

View File

@ -32,7 +32,6 @@
<a href="{{ route('servers.create') }}" class="btn btn-primary mb-3">Add server</a> <a href="{{ route('servers.create') }}" class="btn btn-primary mb-3">Add server</a>
<a href="{{ route('servers-compare-choose') }}" class="btn btn-primary mb-3 ms-2">Compare <a href="{{ route('servers-compare-choose') }}" class="btn btn-primary mb-3 ms-2">Compare
servers</a> servers</a>
<a href="{{ route('yabs.create') }}" class="btn btn-primary mb-3 ms-2">Add a YABs</a>
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-bordered"> <table class="table table-bordered">
<thead class="table-light"> <thead class="table-light">
@ -93,9 +92,9 @@
<i class="fas fa-pen" title="edit"></i> <i class="fas fa-pen" title="edit"></i>
</a> </a>
<i class="fas fa-plug mx-1" id="btn-{{$server->hostname}}" <i class="fas fa-plug mx-1" id="{{$server->hostname}}"
title="check if up" title="check if up"
@click="onClk"> @click="checkUp">
</i> </i>
<i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal" <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
id="{{$server->id}}" title="{{$server->hostname}}"></i> id="{{$server->id}}" title="{{$server->hostname}}"></i>
@ -174,9 +173,9 @@
<i class="fas fa-pen" title="edit"></i> <i class="fas fa-pen" title="edit"></i>
</a> </a>
<i class="fas fa-plug mx-1" id="btn-{{$server->hostname}}" <i class="fas fa-plug mx-1" id="{{$server->hostname}}"
title="check if up" title="check if up"
@click="onClk"> @click="checkUp">
</i> </i>
<i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal" <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
id="{{$server->id}}" title="{{$server->hostname}}"></i> id="{{$server->id}}" title="{{$server->hostname}}"></i>
@ -195,14 +194,9 @@
</div> </div>
</x-card> </x-card>
</div> </div>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>Built on Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
<script> <script>
axios.defaults.headers.common = { axios.defaults.headers.common = {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest', 'X-Requested-With': 'XMLHttpRequest',
@ -220,12 +214,12 @@
showModal: false showModal: false
}, },
methods: { methods: {
onClk(event) { checkUp(event) {
var hostname = event.target.id.replace('btn-', ''); var hostname = event.target.id;
if (hostname) { if (hostname) {
axios axios
.get('/api/online/' + event.target.id.replace('btn-', ''), {headers: {'Authorization': 'Bearer ' + document.querySelector('meta[name="api_token"]').getAttribute('content')}}) .get('/api/online/' + event.target.id, {headers: {'Authorization': 'Bearer ' + document.querySelector('meta[name="api_token"]').getAttribute('content')}})
.then(response => (this.status = response.data.is_online)) .then(response => (this.status = response.data.is_online))
.finally(() => { .finally(() => {
if (this.status) { if (this.status) {

View File

@ -125,9 +125,6 @@
</table> </table>
</div> </div>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>Built on Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
</x-app-layout> </x-app-layout>

View File

@ -204,18 +204,14 @@
</table> </table>
</div> </div>
@else @else
<p>Please <a href="{{ route('yabs.create') }}" class="text-decoration-none">add a YABs</a> to <p>Please add a YABs to
see Geekbench, disk and network speeds</p> see Geekbench, disk and network speeds:</p>
<code>curl -sL yabs.sh | bash -s -- -s "{{route('api.store-yabs', [$server_data->id, \Illuminate\Support\Facades\Auth::user()->api_token])}}"</code>
@endif @endif
</div> </div>
<p id="yabs_code" class="d-none pt-3"><code>curl -sL yabs.sh | bash -s -- -s "{{route('api.store-yabs', [$server_data->id, \Illuminate\Support\Facades\Auth::user()->api_token])}}"</code></p> <p id="yabs_code" class="d-none pt-3"><code>curl -sL yabs.sh | bash -s -- -s "{{route('api.store-yabs', [$server_data->id, \Illuminate\Support\Facades\Auth::user()->api_token])}}"</code></p>
</div> </div>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
</x-app-layout> </x-app-layout>

View File

@ -281,9 +281,6 @@
</div> </div>
</form> </form>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>Built on Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
</x-app-layout> </x-app-layout>

View File

@ -1,15 +1,12 @@
@section("title", "Shared hosting") @extends('layouts.index')
@section('style') @section('title', 'Shared hosting')
@section('css_style')
<x-modal-style></x-modal-style> <x-modal-style></x-modal-style>
@endsection @endsection
@section('scripts') @section('header')
<script src="{{ asset('js/vue.min.js') }}"></script> {{ __('Shared') }}
<script src="{{ asset('js/axios.min.js') }}"></script>
@endsection @endsection
<x-app-layout> @section('content')
<x-slot name="header">
{{ __('Shared hosting') }}
</x-slot>
<div class="container" id="app"> <div class="container" id="app">
<x-delete-confirm-modal></x-delete-confirm-modal> <x-delete-confirm-modal></x-delete-confirm-modal>
<div class="card shadow mt-3"> <div class="card shadow mt-3">
@ -74,29 +71,9 @@
</div> </div>
</div> </div>
</div> </div>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>Built on Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
<x-modal-delete-script>
<script> <x-slot name="uri">shared</x-slot>
let app = new Vue({ </x-modal-delete-script>
el: "#app", @endsection
data: {
"modal_hostname": '',
"modal_id": '',
"delete_form_action": '',
showModal: false
},
methods: {
confirmDeleteModal(event) {
this.showModal = true;
this.modal_hostname = event.target.title;
this.modal_id = event.target.id;
this.delete_form_action = 'shared/' + this.modal_id;
}
}
});
</script>
</x-app-layout>

View File

@ -140,11 +140,6 @@
<x-slot name="route">{{ route('shared.edit', $shared->id) }}</x-slot> <x-slot name="route">{{ route('shared.edit', $shared->id) }}</x-slot>
</x-edit-btn> </x-edit-btn>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
</x-app-layout> </x-app-layout>

View File

@ -43,10 +43,7 @@
@endif @endif
</div> </div>
</div> </div>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>Built on Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
<script type="application/javascript"> <script type="application/javascript">
let app = new Vue({ let app = new Vue({

View File

@ -39,13 +39,16 @@
@if(!empty($yabs)) @if(!empty($yabs))
@foreach($yabs as $yab) @foreach($yabs as $yab)
<tr> <tr>
<td><a href="servers/{{$yab->server_id}}" class="text-decoration-none">{{ $yab->server->hostname }}</a></td> <td><a href="servers/{{$yab->server_id}}"
class="text-decoration-none">{{ $yab->server->hostname }}</a></td>
<td><span title="{{$yab->cpu_model}}">{{ $yab->cpu_cores }}</span></td> <td><span title="{{$yab->cpu_model}}">{{ $yab->cpu_cores }}</span></td>
<td><span title="{{$yab->cpu_model}}">{{ $yab->cpu_freq }}<small>Mhz</small></span></td> <td><span title="{{$yab->cpu_model}}">{{ $yab->cpu_freq }}<small>Mhz</small></span></td>
<td>{{ $yab->ram }}<small>{{ $yab->ram_type }}</small></td> <td>{{ $yab->ram }}<small>{{ $yab->ram_type }}</small></td>
<td>{{ $yab->disk }}<small>{{ $yab->disk_type }}</small></td> <td>{{ $yab->disk }}<small>{{ $yab->disk_type }}</small></td>
<td><a href="https://browser.geekbench.com/v5/cpu/{{$yab->gb5_id}}" class="text-decoration-none">{{ $yab->gb5_single }}</a></td> <td><a href="https://browser.geekbench.com/v5/cpu/{{$yab->gb5_id}}"
<td><a href="https://browser.geekbench.com/v5/cpu/{{$yab->gb5_id}}" class="text-decoration-none">{{ $yab->gb5_multi }}</a></td> class="text-decoration-none">{{ $yab->gb5_single }}</a></td>
<td><a href="https://browser.geekbench.com/v5/cpu/{{$yab->gb5_id}}"
class="text-decoration-none">{{ $yab->gb5_multi }}</a></td>
<td>@if($yab->has_ipv6 === 1) <td>@if($yab->has_ipv6 === 1)
Yes Yes
@else @else
@ -54,7 +57,8 @@
</td> </td>
<td>{{ $yab->disk_speed->d_4k }}<small>{{ $yab->disk_speed->d_4k_type }}</small></td> <td>{{ $yab->disk_speed->d_4k }}<small>{{ $yab->disk_speed->d_4k_type }}</small></td>
<td>{{ $yab->disk_speed->d_64k }}<small>{{ $yab->disk_speed->d_64k_type }}</small></td> <td>{{ $yab->disk_speed->d_64k }}<small>{{ $yab->disk_speed->d_64k_type }}</small></td>
<td>{{ $yab->disk_speed->d_512k }}<small>{{ $yab->disk_speed->d_512k_type }}</small></td> <td>{{ $yab->disk_speed->d_512k }}<small>{{ $yab->disk_speed->d_512k_type }}</small>
</td>
<td>{{ $yab->disk_speed->d_1m }}<small>{{ $yab->disk_speed->d_1m_type }}</small></td> <td>{{ $yab->disk_speed->d_1m }}<small>{{ $yab->disk_speed->d_1m_type }}</small></td>
<td>{{ date_format(new DateTime($yab->output_date), 'Y-m-d g:i a') }}</small></td> <td>{{ date_format(new DateTime($yab->output_date), 'Y-m-d g:i a') }}</small></td>
<td class="text-nowrap"> <td class="text-nowrap">
@ -64,8 +68,8 @@
<i class="fas fa-eye" title="view"></i> <i class="fas fa-eye" title="view"></i>
</a> </a>
<i class="fas fa-trash text-danger ms-3" @click="modalForm" <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
id="btn-{{$yab->server->hostname}}" title="{{$yab->id}}"></i> id="{{$yab->id}}" title="{{$yab->server->hostname}}"></i>
</form> </form>
</td> </td>
</tr> </tr>
@ -80,10 +84,7 @@
</div> </div>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>Built on Laravel
v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</small></p>
@endif
</div> </div>
<x-modal-delete-script> <x-modal-delete-script>
<x-slot name="uri">yabs</x-slot> <x-slot name="uri">yabs</x-slot>

View File

@ -135,11 +135,6 @@
</div> </div>
</div> </div>
</x-card> </x-card>
@if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) <x-details-footer></x-details-footer>
<p class="text-muted mt-4 text-end"><small>
Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}
)</small>
</p>
@endif
</div> </div>
</x-app-layout> </x-app-layout>