diff --git a/README.md b/README.md index c6d9cd0..8c4fabf 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,39 @@ # My idlers -A web app for displaying, organizing and storing information about servers (VPS), shared & reseller hosting, domains, +A web app for displaying, organizing and storing information about servers (VPS), shared & reseller hosting, seed boxes, domains, DNS and misc services. Despite what the name infers this self hosted web app isn't just for storing idling server information. By using 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. -[![Generic badge](https://img.shields.io/badge/version-2.0-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.0-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/) -## V2 notes - -V2 build is a complete overhaul of My idlers with the project being moved onto the Laravel framework. This will simplify -development and most of the features from the original build will be present in V2. - -Using Laravel will bring in an API endpoint and the possibilities to show servers publicly with certain parameters -removed. +[demo site](https://demo.myidlers.com/) **Note:** Create, Update and Delete are disabled. ## Project sponsor [Cloud Five Limited](https://cloud-v.net/) for providing the hosting for demo installation. -## 2.0 changes: +## 2.1.0 changes: -**Unfortunately you cannot migrate your current install to the new 2.0 version** - -* Laravel framework (version 9). -* Breeze authentication. -* API GET for any of the CRUD data. -* Labels (titles/desc) CRUD. -* Misc services CRUD. -* DNS CRUD. -* Ip address CRUD. -* Reseller hosting. -* Added Operating systems to DB, Deleting and creating them now possible. -* Make servers displayable public with config options to hide certain values. -* Vue JS used where possible. -* Datatables used on large tables (Locations, labels, and providers). -* Added caching for home page and servers +* Added Seedbox CRUD +* Added dark mode (settings option. Bootstrap-Night https://vinorodrigues.github.io/bootstrap-dark-5/) +* Added some foreign keys for certain tables +* Added functions for IP and label assignments +* Added functions to forget (clear) cache, preventing chunks of duplicate code +* Added VMware to server virt select dropdown options +* Added Kharkiv and Sao Paulo to locations seeder +* Updated Controllers with DB calls and logic moved to relevant Model +* Updated YABs inserts for version v2022-05-06 +* Updated DB calls to use caching +* Updated Home blade info cards to be col-6 instead of 12 when on mobile +* Updated home page view links on recently added +* Fixed YABs insert error not displaying ## Requires -* PHP 8 (minimum, compatible with 8.1) +* PHP 8 (8.1 recommended) ## Features @@ -73,7 +65,16 @@ removed. * Run `php artisan migrate:fresh --seed` to create tables and seed data * Run `php artisan serve` +## Update + +If you have at least version 2.0 installed: + +* Run `git clone https://github.com/cp6/my-idlers.git` +* Run `composer install` +* Run `php artisan migrate` + ## Run using Docker + ``` docker run \ -p 8000:8000\ @@ -140,6 +141,10 @@ All API requests must be appended with `api/` e.g `mydomain.com/api/servers/gYk8 `reseller/{id}` +`seedbox/` + +`seedbox/{id}` + `settings/` `shared/` diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index 9c82e6f..ced080c 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -142,6 +142,23 @@ class ApiController extends Controller return response($reseller, 200); } + protected function getAllSeedbox() + { + $reseller = DB::table('seedboxes as sb') + ->Join('pricings as p', 'sb.id', '=', 'p.service_id') + ->get(['sb.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + return response($reseller, 200); + } + + protected function getSeedbox($id) + { + $reseller = DB::table('seedboxes as sb') + ->Join('pricings as p', 'sb.id', '=', 'p.service_id') + ->where('sb.id', '=', $id) + ->get(['sb.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + return response($reseller, 200); + } + protected function getAllDomains() { $domains = DB::table('domains as d') @@ -230,7 +247,7 @@ class ApiController extends Controller protected function getAllOs() { - $os = OS::all()->toJson(JSON_PRETTY_PRINT); + $os = OS::allOS()->toJson(JSON_PRETTY_PRINT); return response($os, 200); } diff --git a/app/Http/Controllers/DNSController.php b/app/Http/Controllers/DNSController.php index 56b52a2..8864e55 100644 --- a/app/Http/Controllers/DNSController.php +++ b/app/Http/Controllers/DNSController.php @@ -10,6 +10,7 @@ use App\Models\Domains; use App\Models\Shared; use Carbon\Carbon; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; @@ -51,13 +52,9 @@ class DNSController extends Controller 'domain_id' => ($request->domain_id !== 'null') ? $request->domain_id : null ]); - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $dns_id); - for ($i = 1; $i <= 4; $i++) { - if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $dns_id]); - } - } + Cache::forget('dns_count'); return redirect()->route('dns.index') ->with('success', 'DNS Created Successfully.'); @@ -87,7 +84,7 @@ class DNSController extends Controller ->where('l.service_id', '=', $dn->id) ->get(['labels.id', 'labels.label']); - return view('dns.edit', compact(['dn', 'labels','Servers', 'Domains', 'Shareds', 'Resellers'])); + return view('dns.edit', compact(['dn', 'labels', 'Servers', 'Domains', 'Shareds', 'Resellers'])); } public function update(Request $request, DNS $dn) @@ -108,16 +105,9 @@ class DNSController extends Controller 'domain_id' => ($request->domain_id !== 'null') ? $request->domain_id : null ]); + Labels::deleteLabelsAssignedTo($dn->id); - $deleted = DB::table('labels_assigned')->where('service_id', '=', $dn->id)->delete(); - - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; - - for ($i = 1; $i <= 4; $i++) { - if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned ( label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $dn->id]); - } - } + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $dn->id); return redirect()->route('dns.index') ->with('success', 'DNS updated Successfully.'); @@ -130,6 +120,8 @@ class DNSController extends Controller $items->delete(); + Cache::forget('dns_count'); + Labels::deleteLabelsAssignedTo($id); return redirect()->route('dns.index') diff --git a/app/Http/Controllers/DomainsController.php b/app/Http/Controllers/DomainsController.php index b2af35e..1467c63 100644 --- a/app/Http/Controllers/DomainsController.php +++ b/app/Http/Controllers/DomainsController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\Domains; +use App\Models\Home; use App\Models\Labels; use App\Models\Pricing; use App\Models\Providers; @@ -16,35 +17,22 @@ class DomainsController extends Controller public function index() { - $domains = DB::table('domains as d') - ->join('providers as p', 'd.provider_id', '=', 'p.id') - ->join('pricings as pr', 'd.id', '=', 'pr.service_id') - ->get(['d.*', 'p.name as provider_name', 'pr.*']); + $domains = Domains::domainsDataIndexPage(); return view('domains.index', compact(['domains'])); } public function show(Domains $domain) { - - $service_extras = DB::table('domains as d') - ->join('providers as p', 'd.provider_id', '=', 'p.id') - ->join('pricings as pr', 'd.id', '=', 'pr.service_id') - ->where('d.id', '=', $domain->id) - ->get(['d.*', 'p.name as provider_name', 'pr.*']); - - $labels = DB::table('labels_assigned as l') - ->join('labels', 'l.label_id', '=', 'labels.id') - ->where('l.service_id', '=', $domain->id) - ->get(['labels.label']); + $service_extras = Domains::domainsDataShowPage($domain->id); + $labels = Labels::labelsForService($domain->id); return view('domains.show', compact(['domain', 'service_extras', 'labels'])); } public function create() { - $Providers = Providers::all(); - return view('domains.create', compact('Providers')); + return view('domains.create'); } public function store(Request $request) @@ -59,6 +47,12 @@ class DomainsController extends Controller $domain_id = Str::random(8); + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + $pricing->insertPricing(4, $domain_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); + Domains::create([ 'id' => $domain_id, 'domain' => $request->domain, @@ -70,32 +64,9 @@ class DomainsController extends Controller 'owned_since' => $request->owned_since ]); - $pricing = new Pricing(); + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $domain_id); - $as_usd = $pricing->convertToUSD($request->price, $request->currency); - - Pricing::create([ - 'service_id' => $domain_id, - 'service_type' => 4, - 'currency' => $request->currency, - 'price' => $request->price, - 'term' => $request->payment_term, - 'as_usd' => $as_usd, - 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), - 'next_due_date' => $request->next_due_date, - ]); - - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; - - for ($i = 1; $i <= 4; $i++) { - if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $domain_id]); - } - } - - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Home::homePageCacheForget(); return redirect()->route('domains.index') ->with('success', 'Domain Created Successfully.'); @@ -103,15 +74,9 @@ class DomainsController extends Controller public function edit(Domains $domain) { - $domain_info = DB::table('domains as d') - ->join('pricings as pr', 'd.id', '=', 'pr.service_id') - ->where('d.id', '=', $domain->id) - ->get(['d.*', 'pr.*']); + $domain_info = Domains::domainsDataEditPage($domain->id); - $labels = DB::table('labels_assigned as l') - ->join('labels', 'l.label_id', '=', 'labels.id') - ->where('l.service_id', '=', $domain->id) - ->get(['labels.id', 'labels.label']); + $labels = Labels::labelsForService($domain->id); return view('domains.edit', compact(['domain', 'domain_info', 'labels'])); } @@ -125,6 +90,12 @@ class DomainsController extends Controller 'price' => 'numeric' ]); + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + $pricing->updatePricing($domain->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); + $domain->update([ 'domain' => $request->domain, 'extension' => $request->extension, @@ -136,36 +107,12 @@ class DomainsController extends Controller 'active' => (isset($request->is_active)) ? 1 : 0 ]); - $pricing = new Pricing(); + Labels::deleteLabelsAssignedTo($domain->id); - $as_usd = $pricing->convertToUSD($request->price, $request->currency); + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $domain->id); - DB::table('pricings') - ->where('service_id', $domain->id) - ->update([ - 'service_type' => 4, - 'currency' => $request->currency, - 'price' => $request->price, - 'term' => $request->payment_term, - 'as_usd' => $as_usd, - 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), - 'next_due_date' => $request->next_due_date, - 'active' => (isset($request->is_active)) ? 1 : 0 - ]); - - $deleted = DB::table('labels_assigned')->where('service_id', '=', $domain->id)->delete(); - - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; - - for ($i = 1; $i <= 4; $i++) { - if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned ( label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $domain->id]); - } - } - - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Cache::forget("labels_for_service.{$domain->id}"); + Home::homePageCacheForget(); return redirect()->route('domains.index') ->with('success', 'Domain Updated Successfully.'); @@ -182,9 +129,7 @@ class DomainsController extends Controller Labels::deleteLabelsAssignedTo($domain->id); - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Home::homePageCacheForget(); return redirect()->route('domains.index') ->with('success', 'Domain was deleted Successfully.'); diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index fc1de27..a1f0ce9 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -2,23 +2,20 @@ namespace App\Http\Controllers; +use App\Models\DNS; +use App\Models\Home; +use App\Models\Labels; use App\Models\Pricing; +use App\Models\Settings; use Carbon\Carbon; -use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; use App\Process; use Illuminate\Support\Facades\Session; -//Custom code example class HomeController extends Controller { - /** - * Create a new controller instance. - * - * @return void - */ public function __construct() { $this->middleware('auth'); @@ -29,161 +26,42 @@ class HomeController extends Controller $p = new Process(); $p->startTimer(); - $services_count = Cache::remember('services_count', 1440, function () { - return DB::table('pricings') - ->select('service_type', DB::raw('COUNT(*) as amount')) - ->groupBy('service_type') - ->where('active', '=', 1) - ->get(); - }); - - $due_soon = Cache::remember('due_soon', 1440, function () { - return DB::table('pricings as p') - ->leftJoin('servers as s', 'p.service_id', '=', 's.id') - ->leftJoin('shared_hosting as sh', 'p.service_id', '=', 'sh.id') - ->leftJoin('reseller_hosting as r', 'p.service_id', '=', 'r.id') - ->leftJoin('domains as d', 'p.service_id', '=', 'd.id') - ->leftJoin('misc_services as ms', 'p.service_id', '=', 'ms.id') - ->where('p.active', '=', 1) - ->orderBy('next_due_date', 'ASC') - ->limit(Session::get('due_soon_amount')) - ->get(['p.*', 's.hostname', 'd.domain', 'd.extension', 'r.main_domain as reseller', 'sh.main_domain', 'ms.name']); - }); - - $server_summary = Cache::remember('servers_summary', 1440, function () { - $cpu_sum = DB::table('servers')->get()->where('active', '=', 1)->sum('cpu'); - $ram_mb = DB::table('servers')->get()->where('active', '=', 1)->sum('ram_as_mb'); - $disk_gb = DB::table('servers')->get()->where('active', '=', 1)->sum('disk_as_gb'); - $bandwidth = DB::table('servers')->get()->where('active', '=', 1)->sum('bandwidth'); - $locations_sum = DB::table('servers')->get()->where('active', '=', 1)->groupBy('location_id')->count(); - $providers_sum = DB::table('servers')->get()->where('active', '=', 1)->groupBy('provider_id')->count(); - return array( - 'cpu_sum' => $cpu_sum, - 'ram_mb_sum' => $ram_mb, - 'disk_gb_sum' => $disk_gb, - 'bandwidth_sum' => $bandwidth, - 'locations_sum' => $locations_sum, - 'providers_sum' => $providers_sum, - ); - }); + //Get & set the settings, 1 minute cache + $settings = Settings::getSettings(); + Settings::setSettingsToSession($settings); //Check for past due date and refresh the due date if so: - $pricing = new Pricing(); - $count = 0; - foreach ($due_soon as $service) { - if (Carbon::createFromFormat('Y-m-d', $service->next_due_date)->isPast()) { - $months = $pricing->termAsMonths($service->term);//Get months for term to update the next due date to - $new_due_date = Carbon::createFromFormat('Y-m-d', $service->next_due_date)->addMonths($months)->format('Y-m-d'); - DB::table('pricings')//Update the DB - ->where('service_id', $service->service_id) - ->update(['next_due_date' => $new_due_date]); - $due_soon[$count]->next_due_date = $new_due_date;//Update array being sent to view - } else { - break;//Break because if this date isnt past than the ones after it in the loop wont be either - } - $count++; - } + $due_soon = Home::doDueSoon(Home::dueSoonData()); - Cache::put('due_soon', $due_soon); + //Orders services most recently added first, cached with limit from settings + $recently_added = Home::recentlyAdded(); - $recently_added = Cache::remember('recently_added', 1440, function () { - return DB::table('pricings as p') - ->leftJoin('servers as s', 'p.service_id', '=', 's.id') - ->leftJoin('shared_hosting as sh', 'p.service_id', '=', 'sh.id') - ->leftJoin('reseller_hosting as r', 'p.service_id', '=', 'r.id') - ->leftJoin('domains as d', 'p.service_id', '=', 'd.id') - ->leftJoin('misc_services as ms', 'p.service_id', '=', 'ms.id') - ->where('p.active', '=', 1) - ->orderBy('created_at', 'DESC') - ->limit(Session::get('recently_added_amount')) - ->get(['p.*', 's.hostname', 'd.domain', 'd.extension', 'r.main_domain as reseller', 'sh.main_domain', 'ms.name']); - }); + //Get count tally for each of the services type + $service_count = Home::doServicesCount(Home::servicesCount()); - $settings = Cache::remember('settings', 15, function () { - return DB::table('settings') - ->where('id', '=', 1) - ->get(); - }); + //Get pricing for weekly, monthly, yearly, 2 yearly + $pricing_breakdown = Home::breakdownPricing(Pricing::allPricing()); - Session::put('timer_version_footer', $settings[0]->show_versions_footer ?? 1); - Session::put('show_servers_public', $settings[0]->show_servers_public ?? 0); - Session::put('show_server_value_ip', $settings[0]->show_server_value_ip ?? 0); - Session::put('show_server_value_hostname', $settings[0]->show_server_value_hostname ?? 0); - Session::put('show_server_value_price', $settings[0]->show_server_value_price ?? 0); - Session::put('show_server_value_yabs', $settings[0]->show_server_value_yabs ?? 0); - Session::put('show_server_value_provider', $settings[0]->show_server_value_provider ?? 0); - Session::put('show_server_value_location', $settings[0]->show_server_value_location ?? 0); - Session::put('default_currency', $settings[0]->default_currency ?? 'USD'); - Session::put('default_server_os', $settings[0]->default_server_os ?? 1); - Session::put('due_soon_amount', $settings[0]->due_soon_amount ?? 6); - Session::put('recently_added_amount', $settings[0]->recently_added_amount ?? 6); - Session::save(); - - $pricing = json_decode(DB::table('pricings')->get(), true); - - $total_cost_weekly = $total_cost_pm = $inactive_count = 0; - foreach ($pricing as $price) { - if ($price['active'] === 1) { - if ($price['term'] === 1) {//1 month - $total_cost_weekly += ($price['as_usd'] / 4); - $total_cost_pm += $price['as_usd']; - } elseif ($price['term'] === 2) {//3 months - $total_cost_weekly += ($price['as_usd'] / 12); - $total_cost_pm += ($price['as_usd'] / 3); - } elseif ($price['term'] === 3) {// 6 month - $total_cost_weekly += ($price['as_usd'] / 24); - $total_cost_pm += ($price['as_usd'] / 6); - } elseif ($price['term'] === 4) {// 1 year - $total_cost_weekly += ($price['as_usd'] / 48); - $total_cost_pm += ($price['as_usd'] / 12); - } elseif ($price['term'] === 5) {//2 years - $total_cost_weekly += ($price['as_usd'] / 96); - $total_cost_pm += ($price['as_usd'] / 24); - } elseif ($price['term'] === 6) {//3 years - $total_cost_weekly += ($price['as_usd'] / 144); - $total_cost_pm += ($price['as_usd'] / 36); - } - } else { - $inactive_count++; - } - } - $total_cost_yearly = ($total_cost_pm * 12); - - $services_count = json_decode($services_count, true); - - $servers_count = $domains_count = $shared_count = $reseller_count = $other_count = $total_services = 0; - - foreach ($services_count as $sc) { - $total_services += $sc['amount']; - if ($sc['service_type'] === 1) { - $servers_count = $sc['amount']; - } else if ($sc['service_type'] === 2) { - $shared_count = $sc['amount']; - } else if ($sc['service_type'] === 3) { - $reseller_count = $sc['amount']; - } else if ($sc['service_type'] === 4) { - $domains_count = $sc['amount']; - } else if ($sc['service_type'] === 5) { - $other_count = $sc['amount']; - } - } + //Summary of servers specs + $server_summary = Home::serverSummary(); $p->stopTimer(); $information = array( - 'servers' => $servers_count, - 'domains' => $domains_count, - 'shared' => $shared_count, - 'reseller' => $reseller_count, - 'misc' => $other_count, - 'labels' => DB::table('labels')->count(), - 'dns' => DB::table('d_n_s')->count(), - 'total_services' => $total_services, - 'total_inactive' => $inactive_count, - 'total_cost_weekly' => number_format($total_cost_weekly, 2), - 'total_cost_monthly' => number_format($total_cost_pm, 2), - 'total_cost_yearly' => number_format($total_cost_yearly, 2), - 'total_cost_2_yearly' => number_format(($total_cost_yearly * 2), 2), + 'servers' => $service_count['servers'], + 'domains' => $service_count['domains'], + 'shared' => $service_count['shared'], + 'reseller' => $service_count['reseller'], + 'misc' => $service_count['other'], + 'seedbox' => $service_count['seedbox'], + 'labels' => Labels::labelsCount(), + 'dns' => DNS::dnsCount(), + 'total_services' => $service_count['total'], + 'total_inactive' => $pricing_breakdown['inactive_count'], + 'total_cost_weekly' => number_format($pricing_breakdown['total_cost_weekly'], 2), + 'total_cost_monthly' => number_format($pricing_breakdown['total_cost_montly'], 2), + 'total_cost_yearly' => number_format($pricing_breakdown['total_cost_yearly'], 2), + 'total_cost_2_yearly' => number_format(($pricing_breakdown['total_cost_yearly'] * 2), 2), 'due_soon' => $due_soon, 'newest' => $recently_added, 'execution_time' => number_format($p->getTimeTaken(), 2), diff --git a/app/Http/Controllers/LabelsController.php b/app/Http/Controllers/LabelsController.php index 74f1639..7ff14a9 100644 --- a/app/Http/Controllers/LabelsController.php +++ b/app/Http/Controllers/LabelsController.php @@ -34,6 +34,7 @@ class LabelsController extends Controller ]); Cache::forget('all_labels'); + Cache::forget('labels_count'); return redirect()->route('labels.index') ->with('success', 'Label Created Successfully.'); @@ -66,6 +67,8 @@ class LabelsController extends Controller $items->delete(); + Cache::forget('labels_count'); + Labels::deleteLabelAssignedAs($label_id); Cache::forget('all_labels'); diff --git a/app/Http/Controllers/LocationsController.php b/app/Http/Controllers/LocationsController.php index d160966..ace99cd 100644 --- a/app/Http/Controllers/LocationsController.php +++ b/app/Http/Controllers/LocationsController.php @@ -12,7 +12,7 @@ class LocationsController extends Controller { public function index() { - $locations = Locations::all(); + $locations = Locations::allLocations(); return view('locations.index', compact(['locations'])); } @@ -31,7 +31,7 @@ class LocationsController extends Controller 'name' => $request->location_name ]); - Cache::forget('all_locations'); + Cache::forget('locations'); return redirect()->route('locations.index') ->with('success', 'Location Created Successfully.'); @@ -65,7 +65,7 @@ class LocationsController extends Controller $items->delete(); - Cache::forget('all_locations'); + Cache::forget('locations'); return redirect()->route('locations.index') ->with('success', 'Location was deleted Successfully.'); diff --git a/app/Http/Controllers/MiscController.php b/app/Http/Controllers/MiscController.php index a6d899e..c5fc361 100644 --- a/app/Http/Controllers/MiscController.php +++ b/app/Http/Controllers/MiscController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\Home; use App\Models\Misc; use App\Models\Pricing; use Illuminate\Http\Request; @@ -46,30 +47,19 @@ class MiscController extends Controller $ms_id = Str::random(8); + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + $pricing->insertPricing(5, $ms_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); + Misc::create([ 'id' => $ms_id, 'name' => $request->name, 'owned_since' => $request->owned_since ]); - $pricing = new Pricing(); - - $as_usd = $pricing->convertToUSD($request->price, $request->currency); - - Pricing::create([ - 'service_id' => $ms_id, - 'service_type' => 5, - 'currency' => $request->currency, - 'price' => $request->price, - 'term' => $request->payment_term, - 'as_usd' => $as_usd, - 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), - 'next_due_date' => $request->next_due_date, - ]); - - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Home::homePageCacheForget(); return redirect()->route('misc.index') ->with('success', 'Misc service created Successfully.'); @@ -104,21 +94,9 @@ class MiscController extends Controller $as_usd = $pricing->convertToUSD($request->price, $request->currency); - DB::table('pricings') - ->where('service_id', $misc->id) - ->update([ - 'currency' => $request->currency, - 'price' => $request->price, - 'term' => $request->payment_term, - 'as_usd' => $as_usd, - 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), - 'next_due_date' => $request->next_due_date, - 'active' => (isset($request->is_active)) ? 1 : 0 - ]); + $pricing->updatePricing($misc->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Home::homePageCacheForget(); return redirect()->route('misc.index') ->with('success', 'Misc service updated Successfully.'); @@ -133,9 +111,7 @@ class MiscController extends Controller $p = new Pricing(); $p->deletePricing($misc->id); - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Home::homePageCacheForget(); return redirect()->route('misc.index') ->with('success', 'Misc service was deleted Successfully.'); diff --git a/app/Http/Controllers/OsController.php b/app/Http/Controllers/OsController.php index 784b6b5..9a8b5e2 100644 --- a/app/Http/Controllers/OsController.php +++ b/app/Http/Controllers/OsController.php @@ -10,7 +10,7 @@ class OsController extends Controller { public function index() { - $os = OS::all(); + $os = OS::allOS(); return view('os.index', compact(['os'])); } @@ -29,7 +29,7 @@ class OsController extends Controller 'name' => $request->os_name ]); - Cache::forget('all_os'); + Cache::forget('operating_systems'); return redirect()->route('os.index') ->with('success', 'OS Created Successfully.'); @@ -41,7 +41,7 @@ class OsController extends Controller $items->delete(); - Cache::forget('all_os'); + Cache::forget('operating_systems'); return redirect()->route('os.index') ->with('success', 'OS was deleted Successfully.'); diff --git a/app/Http/Controllers/ProvidersController.php b/app/Http/Controllers/ProvidersController.php index 7002c78..8e4eb89 100644 --- a/app/Http/Controllers/ProvidersController.php +++ b/app/Http/Controllers/ProvidersController.php @@ -12,7 +12,7 @@ class ProvidersController extends Controller { public function index() { - $providers = Providers::all(); + $providers = Providers::allProviders(); return view('providers.index', compact(['providers'])); } @@ -31,7 +31,7 @@ class ProvidersController extends Controller 'name' => $request->provider_name ]); - Cache::forget('all_providers'); + Cache::forget('providers'); return redirect()->route('providers.index') ->with('success', 'Provider Created Successfully.'); @@ -39,22 +39,7 @@ class ProvidersController extends Controller public function show(Providers $provider) { - $servers = DB::table('servers as s') - ->where('s.provider_id', '=', $provider->id) - ->get(['s.id', 's.hostname']) - ->toArray(); - - $shared = DB::table('shared_hosting as s') - ->where('s.provider_id', '=', $provider->id) - ->get(['s.id', 's.main_domain as main_domain_shared']) - ->toArray(); - - $reseller = DB::table('reseller_hosting as r') - ->where('r.provider_id', '=', $provider->id) - ->get(['r.id', 'r.main_domain as main_domain_reseller']) - ->toArray(); - - $data = array_merge($servers, $shared, $reseller); + $data = Providers::showServicesForProvider($provider->id); return view('providers.show', compact(['provider', 'data'])); } @@ -65,7 +50,7 @@ class ProvidersController extends Controller $items->delete(); - Cache::forget('all_providers'); + Cache::forget('providers'); return redirect()->route('providers.index') ->with('success', 'Provider was deleted Successfully.'); diff --git a/app/Http/Controllers/ResellerController.php b/app/Http/Controllers/ResellerController.php index 43ac8d1..075fc72 100644 --- a/app/Http/Controllers/ResellerController.php +++ b/app/Http/Controllers/ResellerController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\Home; use App\Models\IPs; use App\Models\Labels; use App\Models\Locations; @@ -17,19 +18,15 @@ class ResellerController extends Controller { public function index() { - $resellers = DB::table('reseller_hosting as s') - ->join('providers as p', 's.provider_id', '=', 'p.id') - ->join('locations as l', 's.location_id', '=', 'l.id') - ->join('pricings as pr', 's.id', '=', 'pr.service_id') - ->get(['s.*', 'p.name as provider_name', 'pr.*', 'l.name as location']); + $resellers = Reseller::resellerDataIndexPage(); return view('reseller.index', compact(['resellers'])); } public function create() { - $Providers = Providers::all(); - $Locations = Locations::all(); + $Providers = Providers::allProviders(); + $Locations = Locations::allLocations(); return view('reseller.create', compact(['Providers', 'Locations'])); } @@ -62,6 +59,18 @@ class ResellerController extends Controller $reseller_id = Str::random(8); + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + $pricing->insertPricing(3, $reseller_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); + + if (!is_null($request->dedicated_ip)) { + IPs::insertIP($reseller_id, $request->dedicated_ip); + } + + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $reseller_id); + Reseller::create([ 'id' => $reseller_id, 'main_domain' => $request->domain, @@ -82,44 +91,7 @@ class ResellerController extends Controller 'db_limit' => $request->db ]); - $pricing = new Pricing(); - - $as_usd = $pricing->convertToUSD($request->price, $request->currency); - - Pricing::create([ - 'service_id' => $reseller_id, - 'service_type' => 3, - 'currency' => $request->currency, - 'price' => $request->price, - 'term' => $request->payment_term, - 'as_usd' => $as_usd, - 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), - 'next_due_date' => $request->next_due_date, - ]); - - if (!is_null($request->dedicated_ip)) { - IPs::create( - [ - 'id' => Str::random(8), - 'service_id' => $reseller_id, - 'address' => $request->dedicated_ip, - 'is_ipv4' => (filter_var($request->dedicated_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1, - 'active' => 1 - ] - ); - } - - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; - - for ($i = 1; $i <= 4; $i++) { - if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $reseller_id]); - } - } - - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Home::homePageCacheForget(); return redirect()->route('reseller.index') ->with('success', 'Reseller hosting created Successfully.'); @@ -128,45 +100,23 @@ class ResellerController extends Controller public function show(Reseller $reseller) { - $reseller_extras = DB::table('reseller_hosting as s') - ->join('pricings as pr', 's.id', '=', 'pr.service_id') - ->join('providers as p', 's.provider_id', '=', 'p.id') - ->join('locations as l', 's.location_id', '=', 'l.id') - ->where('s.id', '=', $reseller->id) - ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*']); + $reseller_extras = Reseller::resellerDataShowPage($reseller->id); - $labels = DB::table('labels_assigned as l') - ->LeftJoin('labels', 'l.label_id', '=', 'labels.id') - ->where('l.service_id', '=', $reseller->id) - ->get(['labels.label']); - - $ip_address = DB::table('ips as i') - ->where('i.service_id', '=', $reseller->id) - ->get(); + $labels = Labels::labelsForService($reseller->id); + $ip_address = IPs::ipsForServer($reseller->id); return view('reseller.show', compact(['reseller', 'reseller_extras', 'labels', 'ip_address'])); } public function edit(Reseller $reseller) { - $locations = DB::table('locations')->get(['*']); - $providers = json_decode(DB::table('providers')->get(['*']), true); + $labels = Labels::labelsForService($reseller->id); - $labels = DB::table('labels_assigned as l') - ->join('labels', 'l.label_id', '=', 'labels.id') - ->where('l.service_id', '=', $reseller->id) - ->get(['labels.id', 'labels.label']); + $ip_address = IPs::ipsForServer($reseller->id); - $ip_address = json_decode(DB::table('ips as i') - ->where('i.service_id', '=', $reseller->id) - ->get(), true); + $reseller = Reseller::resellerDataEditPage($reseller->id); - $reseller = DB::table('reseller_hosting as s') - ->join('pricings as p', 's.id', '=', 'p.service_id') - ->where('s.id', '=', $reseller->id) - ->get(['s.*', 'p.*']); - - return view('reseller.edit', compact(['reseller', 'locations', 'providers', 'ip_address', 'labels'])); + return view('reseller.edit', compact(['reseller', 'ip_address', 'labels'])); } public function update(Request $request, Reseller $reseller) @@ -217,41 +167,21 @@ class ResellerController extends Controller $as_usd = $pricing->convertToUSD($request->price, $request->currency); - DB::table('pricings') - ->where('service_id', $request->id) - ->update([ - 'currency' => $request->currency, - 'price' => $request->price, - 'term' => $request->payment_term, - 'as_usd' => $as_usd, - 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), - 'next_due_date' => $request->next_due_date, - ]); + $pricing->updatePricing($request->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); - $deleted = DB::table('labels_assigned')->where('service_id', '=', $request->id)->delete(); + Labels::deleteLabelsAssignedTo($request->id); - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $request->id); - for ($i = 1; $i <= 4; $i++) { - if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned ( label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $request->id]); - } - } - - $delete_ip = DB::table('ips')->where('service_id', '=', $request->id)->delete(); + IPs::deleteIPsAssignedTo($request->id); if (isset($request->dedicated_ip)) { - DB::insert('INSERT INTO ips (id, address, service_id, is_ipv4) values (?, ?, ?, ?)', [ - Str::random(8), - $request->dedicated_ip, - $request->id, - (filter_var($request->dedicated_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1 - ]); + IPs::insertIP($request->id, $request->dedicated_ip); } - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Cache::forget("labels_for_service.{$request->id}"); + + Home::homePageCacheForget(); return redirect()->route('reseller.index') ->with('success', 'Reseller hosting updated Successfully.'); @@ -271,9 +201,7 @@ class ResellerController extends Controller IPs::deleteIPsAssignedTo($id); - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Home::homePageCacheForget(); return redirect()->route('reseller.index') ->with('success', 'Reseller hosting was deleted Successfully.'); diff --git a/app/Http/Controllers/SeedBoxesController.php b/app/Http/Controllers/SeedBoxesController.php new file mode 100644 index 0000000..ed5bfe0 --- /dev/null +++ b/app/Http/Controllers/SeedBoxesController.php @@ -0,0 +1,170 @@ +validate([ + 'title' => 'required|string', + 'hostname' => 'string|nullable', + 'seed_box_type' => 'required', + 'provider_id' => 'numeric', + 'location_id' => 'numeric', + 'price' => 'numeric', + 'payment_term' => 'numeric', + 'was_promo' => 'numeric', + 'owned_since' => 'date', + 'disk' => 'numeric', + 'bandwidth' => 'numeric', + 'port_speed' => 'numeric', + 'next_due_date' => 'required|date' + ]); + + $seedbox_id = Str::random(8); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + $pricing->insertPricing(6, $seedbox_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); + + Labels::deleteLabelsAssignedTo($seedbox_id); + + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $seedbox_id); + + SeedBoxes::create([ + 'id' => $seedbox_id, + 'title' => $request->title, + 'hostname' => $request->hostname, + 'seed_box_type' => $request->seed_box_type, + 'provider_id' => $request->provider_id, + 'location_id' => $request->location_id, + 'disk' => $request->disk, + 'disk_type' => 'GB', + 'disk_as_gb' => $request->disk, + 'owned_since' => $request->owned_since, + 'bandwidth' => $request->bandwidth, + 'port_speed' => $request->port_speed, + 'was_promo' => $request->was_promo + ]); + + Home::homePageCacheForget(); + + return redirect()->route('seedboxes.index') + ->with('success', 'Seed box created Successfully.'); + + } + + public function show(SeedBoxes $seedbox) + { + $seedbox_extras = SeedBoxes::seedBoxDataShowPage($seedbox->id); + + $labels = Labels::labelsForService($seedbox->id); + + return view('seedboxes.show', compact(['seedbox', 'seedbox_extras', 'labels'])); + } + + public function edit(SeedBoxes $seedbox) + { + $seedbox = SeedBoxes::seedBoxEditDataPage($seedbox->id); + + $labels = Labels::labelsForService($seedbox[0]->id); + + return view('seedboxes.edit', compact(['seedbox', 'labels'])); + } + + public function update(Request $request, SeedBoxes $seedbox) + { + $request->validate([ + 'id' => 'required|size:8', + 'title' => 'required|string', + 'hostname' => 'string|nullable', + 'seed_box_type' => 'required', + 'disk' => 'numeric', + 'provider_id' => 'numeric', + 'location_id' => 'numeric', + 'price' => 'numeric', + 'payment_term' => 'numeric', + 'was_promo' => 'numeric', + 'owned_since' => 'date', + 'bandwidth' => 'numeric', + 'port_speed' => 'numeric' + ]); + + DB::table('seedboxes') + ->where('id', $seedbox->id) + ->update([ + 'title' => $request->title, + 'hostname' => $request->hostname, + 'seed_box_type' => $request->seed_box_type, + 'location_id' => $request->location_id, + 'provider_id' => $request->provider_id, + 'disk' => $request->disk, + 'disk_type' => 'GB', + 'disk_as_gb' => $request->disk, + 'owned_since' => $request->owned_since, + 'bandwidth' => $request->bandwidth, + 'port_speed' => $request->port_speed, + 'was_promo' => $request->was_promo + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + $pricing->updatePricing($seedbox->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); + + Labels::deleteLabelsAssignedTo($seedbox->id); + + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $seedbox->id); + + Cache::forget("labels_for_service.{$seedbox->id}"); + + Home::homePageCacheForget(); + + return redirect()->route('seedboxes.index') + ->with('success', 'Seed box updated Successfully.'); + } + + public function destroy(SeedBoxes $seedbox) + { + $seedbox_id = $seedbox->id; + $items = SeedBoxes::find($seedbox_id); + $items->delete(); + + $p = new Pricing(); + $p->deletePricing($seedbox_id); + + Labels::deleteLabelsAssignedTo($seedbox_id); + + Home::homePageCacheForget(); + + return redirect()->route('seedboxes.index') + ->with('success', 'Seed box was deleted Successfully.'); + } +} diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 598900c..b86a182 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -4,53 +4,31 @@ namespace App\Http\Controllers; use App\Models\IPs; use App\Models\Labels; -use App\Models\OS; use App\Models\Pricing; use App\Models\Server; -use App\Models\Providers; -use App\Models\Locations; +use App\Models\Settings; +use App\Models\Yabs; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Cache; -use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Session; use Illuminate\Support\Str; use Illuminate\Support\Facades\DB; -use Carbon\Carbon; class ServerController extends Controller { public function index() { - $servers = Cache::remember('all_active_servers', 1440, function () { - return DB::table('servers as s') - ->join('pricings as pr', 's.id', '=', 'pr.service_id') - ->join('providers as p', 's.provider_id', '=', 'p.id') - ->join('locations as l', 's.location_id', '=', 'l.id') - ->join('os as o', 's.os_id', '=', 'o.id') - ->where('s.active', '=', 1) - ->get(['s.*', 'pr.currency', 'pr.price', 'pr.term', 'pr.as_usd', 'pr.next_due_date', 'p.name as provider_name', 'l.name as location', 'o.name as os_name']); - }); + $servers = Server::activeServersDataIndexPage(); - $non_active_servers = Cache::remember('non_active_servers', 1440, function () { - return DB::table('servers as s') - ->join('pricings as pr', 's.id', '=', 'pr.service_id') - ->join('providers as p', 's.provider_id', '=', 'p.id') - ->join('locations as l', 's.location_id', '=', 'l.id') - ->join('os as o', 's.os_id', '=', 'o.id') - ->where('s.active', '=', 0) - ->get(['s.*', 'pr.currency', 'pr.price', 'pr.term', 'pr.as_usd', 'p.name as provider_name', 'l.name as location', 'o.name as os_name']); - }); + $non_active_servers = Server::nonActiveServersDataIndexPage(); return view('servers.index', compact(['servers', 'non_active_servers'])); } public function showServersPublic() { - $settings = DB::table('settings') - ->where('id', '=', 1) - ->get(); + $settings = Settings::getSettings(); Session::put('timer_version_footer', $settings[0]->show_versions_footer ?? 1); Session::put('show_servers_public', $settings[0]->show_servers_public ?? 0); @@ -63,17 +41,7 @@ class ServerController extends Controller Session::save(); if ((Session::get('show_servers_public') === 1)) { - $servers = DB::table('servers as s') - ->Join('pricings as pr', 's.id', '=', 'pr.service_id') - ->Join('providers as p', 's.provider_id', '=', 'p.id') - ->Join('locations as l', 's.location_id', '=', 'l.id') - ->Join('os as o', 's.os_id', '=', 'o.id') - ->LeftJoin('ips as i', 's.id', '=', 'i.service_id') - ->LeftJoin('yabs as y', 's.id', '=', 'y.server_id') - ->LeftJoin('disk_speed as ds', 'y.id', '=', 'ds.id') - ->where('s.show_public', '=', 1) - ->get(['pr.currency', 'pr.price', 'pr.term', 'pr.as_usd', 'pr.next_due_date', 'pr.service_id', 'p.name as provider_name', 'l.name as location', 'o.name as os_name', 'y.*', 'y.id as yabs_id', 'ds.*', 's.*', 'i.address as ip', 'i.is_ipv4']); - + $servers = Server::publicServerData(); return view('servers.public-index', compact('servers')); } return response()->view('errors.404', array("status" => 404, "title" => "Page not found", "message" => ""), 404); @@ -81,10 +49,7 @@ class ServerController extends Controller public function create() { - $Providers = Providers::all(); - $Locations = Locations::all(); - $Os = OS::all(); - return view('servers.create', compact(['Providers', 'Locations', 'Os'])); + return view('servers.create'); } public function store(Request $request) @@ -109,6 +74,20 @@ class ServerController extends Controller $server_id = Str::random(8); + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + $pricing->insertPricing(1, $server_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); + + if (!is_null($request->ip1)) { + IPs::insertIP($server_id, $request->ip1); + } + + if (!is_null($request->ip2)) { + IPs::insertIP($server_id, $request->ip2); + } + Server::create([ 'id' => $server_id, 'hostname' => $request->hostname, @@ -132,59 +111,9 @@ class ServerController extends Controller 'show_public' => (isset($request->show_public)) ? 1 : 0 ]); - if (!is_null($request->ip1)) { - IPs::create( - [ - 'id' => Str::random(8), - 'service_id' => $server_id, - 'address' => $request->ip1, - 'is_ipv4' => (filter_var($request->ip1, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1, - 'active' => 1 - ] - ); - } + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $server_id); - if (!is_null($request->ip2)) { - IPs::create( - [ - 'id' => Str::random(8), - 'service_id' => $server_id, - 'address' => $request->ip2, - 'is_ipv4' => (filter_var($request->ip2, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1, - 'active' => 1 - ] - ); - } - - $pricing = new Pricing(); - - $as_usd = $pricing->convertToUSD($request->price, $request->currency); - - Pricing::create([ - 'service_id' => $server_id, - 'service_type' => 1, - 'currency' => $request->currency, - 'price' => $request->price, - 'term' => $request->payment_term, - 'as_usd' => $as_usd, - 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), - 'next_due_date' => $request->next_due_date, - ]); - - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; - - for ($i = 1; $i <= 4; $i++) { - if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $server_id]); - } - } - - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache - Cache::forget('all_active_servers');//all servers cache - Cache::forget('non_active_servers');//all servers cache - Cache::forget('servers_summary');//servers summary cache + Server::serverRelatedCacheForget(); return redirect()->route('servers.index') ->with('success', 'Server Created Successfully.'); @@ -192,53 +121,24 @@ class ServerController extends Controller public function show(Server $server) { - $server_extras = DB::table('servers as s') - ->join('pricings as pr', 's.id', '=', 'pr.service_id') - ->join('providers as p', 's.provider_id', '=', 'p.id') - ->join('locations as l', 's.location_id', '=', 'l.id') - ->join('os as o', 's.os_id', '=', 'o.id') - ->Leftjoin('yabs as y', 's.id', '=', 'y.server_id') - ->Leftjoin('disk_speed as ds', 'y.id', '=', 'ds.id') - ->where('s.id', '=', $server->id) - ->get(['s.*', 'p.name as provider', 'l.name as location', 'o.name as os_name', 'pr.*', 'y.*', 'ds.*']); + $server_extras = Server::serverDataShowPage($server->id); - $network_speeds = json_decode(DB::table('network_speed') - ->where('network_speed.server_id', '=', $server->id) - ->get(), true); + $network_speeds = Yabs::networkSpeedsForServer($server->id); - $ip_addresses = json_decode(DB::table('ips as i') - ->where('i.service_id', '=', $server->id) - ->get(), true); + $ip_addresses = IPs::ipsForServer($server->id); - $labels = DB::table('labels_assigned as l') - ->join('labels', 'l.label_id', '=', 'labels.id') - ->where('l.service_id', '=', $server->id) - ->get(['labels.label']); + $labels = Labels::labelsForService($server->id); return view('servers.show', compact(['server', 'server_extras', 'network_speeds', 'labels', 'ip_addresses'])); } public function edit(Server $server) { - $locations = DB::table('locations')->get(['*']); - $providers = DB::table('providers')->get(['*']); - $labels = DB::table('labels_assigned as l') - ->join('labels', 'l.label_id', '=', 'labels.id') - ->where('l.service_id', '=', $server->id) - ->get(['labels.id', 'labels.label']); + $ip_addresses = IPs::ipsForServer($server->id); - $os = DB::table('os')->get(['*']); + $server = Pricing::pricingForService($server->id); - $ip_addresses = json_decode(DB::table('ips as i') - ->where('i.service_id', '=', $server->id) - ->get(), true); - - $server = DB::table('servers as s') - ->join('pricings as p', 's.id', '=', 'p.service_id') - ->where('s.id', '=', $server->id) - ->get(['s.*', 'p.*']); - - return view('servers.edit', compact(['server', 'locations', 'providers', 'os', 'labels', 'ip_addresses'])); + return view('servers.edit', compact(['server', 'ip_addresses'])); } public function update(Request $request, Server $server) @@ -256,9 +156,10 @@ class ServerController extends Controller 'next_due_date' => 'date' ]); + $server_id = $request->server_id; DB::table('servers') - ->where('id', $request->server_id) + ->where('id', $server_id) ->update([ 'hostname' => $request->hostname, 'server_type' => $request->server_type, @@ -286,49 +187,23 @@ class ServerController extends Controller $as_usd = $pricing->convertToUSD($request->price, $request->currency); - DB::table('pricings') - ->where('service_id', $request->server_id) - ->update([ - 'service_type' => 1, - 'currency' => $request->currency, - 'price' => $request->price, - 'term' => $request->payment_term, - 'as_usd' => $as_usd, - 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), - 'next_due_date' => $request->next_due_date, - 'active' => (isset($request->is_active)) ? 1 : 0 - ]); + $pricing->updatePricing($server_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); - $deleted = DB::table('labels_assigned')->where('service_id', '=', $server->id)->delete(); + Labels::deleteLabelsAssignedTo($server_id); - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $server_id); - for ($i = 1; $i <= 4; $i++) { - if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned ( label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $request->server_id]); - } - } - - $deleted = DB::table('ips')->where('service_id', '=', $server->id)->delete(); + IPs::deleteIPsAssignedTo($server_id); for ($i = 1; $i <= 8; $i++) {//Max of 8 ips $obj = 'ip' . $i; if (isset($request->$obj) && !is_null($request->$obj)) { - DB::insert('INSERT INTO ips (id, address, service_id, is_ipv4) values (?, ?, ?, ?)', [ - Str::random(8), - $request->$obj, - $request->server_id, - (filter_var($request->$obj, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1 - ]); + IPs::insertIP($server_id, $request->$obj); } } - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache - Cache::forget('all_active_servers');//all servers cache - Cache::forget('non_active_servers');//all servers cache - Cache::forget('servers_summary');//servers summary cache + Server::serverRelatedCacheForget(); + Server::serverSpecificCacheForget($server_id); return redirect()->route('servers.index') ->with('success', 'Server Updated Successfully.'); @@ -347,12 +222,7 @@ class ServerController extends Controller IPs::deleteIPsAssignedTo($server->id); - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache - Cache::forget('all_active_servers');//all servers cache - Cache::forget('non_active_servers');//all servers cache - Cache::forget('servers_summary');//servers summary cache + Server::serverRelatedCacheForget(); return redirect()->route('servers.index') ->with('success', 'Server was deleted Successfully.'); @@ -366,40 +236,21 @@ class ServerController extends Controller public function compareServers($server1, $server2) { - $server1_data = DB::table('servers as s') - ->join('pricings as pr', 's.id', '=', 'pr.service_id') - ->join('providers as p', 's.provider_id', '=', 'p.id') - ->join('locations as l', 's.location_id', '=', 'l.id') - ->Join('yabs as y', 's.id', '=', 'y.server_id') - ->Join('disk_speed as ds', 'y.id', '=', 'ds.id') - ->where('s.id', '=', $server1) - ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*', 'y.*', 'y.id as yabs_id', 'ds.*']); + $server1_data = Server::serverCompareData($server1); if (count($server1_data) === 0) { return response()->view('errors.404', array("status" => 404, "title" => "Page not found", "message" => "No server with YABs data was found for id '$server1'"), 404); } - $server1_network = DB::table('network_speed') - ->where('id', '=', $server1_data[0]->yabs_id) - ->get(); + $server1_network = Yabs::serverCompareNetwork($server1_data[0]->yabs_id); - $server2_data = DB::table('servers as s') - ->join('pricings as pr', 's.id', '=', 'pr.service_id') - ->join('providers as p', 's.provider_id', '=', 'p.id') - ->join('locations as l', 's.location_id', '=', 'l.id') - ->Join('yabs as y', 's.id', '=', 'y.server_id') - ->Join('disk_speed as ds', 'y.id', '=', 'ds.id') - ->where('s.id', '=', $server2) - ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*', 'y.*', 'y.id as yabs_id', 'ds.*']); + $server2_data = Server::serverCompareData($server2); if (count($server2_data) === 0) { return response()->view('errors.404', array("status" => 404, "title" => "Page not found", "message" => "No server with YABs data was found for id '$server2'"), 404); } - $server2_network = DB::table('network_speed') - ->where('id', '=', $server2_data[0]->yabs_id) - ->get(); - + $server2_network = Yabs::serverCompareNetwork($server2_data[0]->yabs_id); return view('servers.compare', compact('server1_data', 'server2_data', 'server1_network', 'server2_network')); } } diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index dfae00f..6bc444c 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -22,6 +22,7 @@ class SettingsController extends Controller public function update(Request $request, Settings $settings) { $request->validate([ + 'dark_mode' => 'required|boolean', 'show_versions_footer' => 'required|boolean', 'show_server_value_ip' => 'required|boolean', 'show_server_value_hostname' => 'required|boolean', @@ -38,6 +39,7 @@ class SettingsController extends Controller DB::table('settings') ->where('id', 1) ->update([ + 'dark_mode' => $request->dark_mode, 'show_versions_footer' => $request->show_versions_footer, 'show_servers_public' => $request->show_servers_public, 'show_server_value_ip' => $request->show_server_value_ip, @@ -52,19 +54,7 @@ class SettingsController extends Controller 'recently_added_amount' => $request->recently_added_amount ]); - Session::put('timer_version_footer', $request->show_versions_footer); - Session::put('show_servers_public', $request->show_servers_public); - Session::put('show_server_value_ip', $request->show_server_value_ip); - Session::put('show_server_value_hostname', $request->show_server_value_hostname); - Session::put('show_server_value_price', $request->show_server_value_price); - Session::put('show_server_value_yabs', $request->show_server_value_yabs); - Session::put('show_server_value_provider', $request->show_server_value_provider); - Session::put('show_server_value_location', $request->show_server_value_location); - Session::put('default_currency', $request->default_currency); - Session::put('default_server_os', $request->default_server_os); - Session::put('due_soon_amount', $request->due_soon_amount); - Session::put('recently_added_amount', $request->recently_added_amount); - Session::save(); + Settings::setSettingsToSession($settings); Cache::forget('due_soon');//Main page due_soon cache Cache::forget('recently_added');//Main page recently_added cache diff --git a/app/Http/Controllers/SharedController.php b/app/Http/Controllers/SharedController.php index 63cdfb7..e6fd36d 100644 --- a/app/Http/Controllers/SharedController.php +++ b/app/Http/Controllers/SharedController.php @@ -2,11 +2,10 @@ namespace App\Http\Controllers; +use App\Models\Home; use App\Models\IPs; use App\Models\Labels; -use App\Models\Locations; use App\Models\Pricing; -use App\Models\Providers; use App\Models\Shared; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; @@ -17,20 +16,14 @@ class SharedController extends Controller { public function index() { - $shared = DB::table('shared_hosting as s') - ->join('providers as p', 's.provider_id', '=', 'p.id') - ->join('locations as l', 's.location_id', '=', 'l.id') - ->join('pricings as pr', 's.id', '=', 'pr.service_id') - ->get(['s.*', 'p.name as provider_name', 'pr.*', 'l.name as location']); + $shared = Shared::sharedDataIndexPage(); return view('shared.index', compact(['shared'])); } public function create() { - $Providers = Providers::all(); - $Locations = Locations::all(); - return view('shared.create', compact(['Providers', 'Locations'])); + return view('shared.create'); } public function store(Request $request) @@ -60,6 +53,22 @@ class SharedController extends Controller $shared_id = Str::random(8); + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + $pricing->insertPricing(2, $shared_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); + + Labels::deleteLabelsAssignedTo($shared_id); + + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $shared_id); + + IPs::deleteIPsAssignedTo($shared_id); + + if (!is_null($request->dedicated_ip)) { + IPs::insertIP($shared_id, $request->dedicated_ip); + } + Shared::create([ 'id' => $shared_id, 'main_domain' => $request->domain, @@ -79,44 +88,7 @@ class SharedController extends Controller 'db__limit' => $request->db ]); - $pricing = new Pricing(); - - $as_usd = $pricing->convertToUSD($request->price, $request->currency); - - Pricing::create([ - 'service_id' => $shared_id, - 'service_type' => 2, - 'currency' => $request->currency, - 'price' => $request->price, - 'term' => $request->payment_term, - 'as_usd' => $as_usd, - 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), - 'next_due_date' => $request->next_due_date, - ]); - - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; - - for ($i = 1; $i <= 4; $i++) { - if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $shared_id]); - } - } - - if (!is_null($request->dedicated_ip)) { - IPs::create( - [ - 'id' => Str::random(8), - 'service_id' => $shared_id, - 'address' => $request->dedicated_ip, - 'is_ipv4' => (filter_var($request->dedicated_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1, - 'active' => 1 - ] - ); - } - - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Home::homePageCacheForget(); return redirect()->route('shared.index') ->with('success', 'Shared hosting created Successfully.'); @@ -124,44 +96,24 @@ class SharedController extends Controller public function show(Shared $shared) { - $shared_extras = DB::table('shared_hosting as s') - ->join('pricings as pr', 's.id', '=', 'pr.service_id') - ->join('providers as p', 's.provider_id', '=', 'p.id') - ->join('locations as l', 's.location_id', '=', 'l.id') - ->where('s.id', '=', $shared->id) - ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*']); + $shared_extras = Shared::sharedDataShowPage($shared->id); - $labels = DB::table('labels_assigned as l') - ->join('labels', 'l.label_id', '=', 'labels.id') - ->where('l.service_id', '=', $shared->id) - ->get(['labels.label']); + $labels = Labels::labelsForService($shared->id); - $ip_address = DB::table('ips as i') - ->where('i.service_id', '=', $shared->id) - ->get(); + $ip_address = IPs::ipsForServer($shared->id); return view('shared.show', compact(['shared', 'shared_extras', 'labels', 'ip_address'])); } public function edit(Shared $shared) { - $locations = DB::table('locations')->get(['*']); - $providers = json_decode(DB::table('providers')->get(['*']), true); - $labels = DB::table('labels_assigned as l') - ->join('labels', 'l.label_id', '=', 'labels.id') - ->where('l.service_id', '=', $shared->id) - ->get(['labels.id', 'labels.label']); + $labels = Labels::labelsForService($shared->id); - $ip_address = json_decode(DB::table('ips as i') - ->where('i.service_id', '=', $shared->id) - ->get(), true); + $ip_address = IPs::ipsForServer($shared->id); - $shared = DB::table('shared_hosting as s') - ->join('pricings as p', 's.id', '=', 'p.service_id') - ->where('s.id', '=', $shared->id) - ->get(['s.*', 'p.*']); + $shared = Shared::sharedEditDataPage($shared->id); - return view('shared.edit', compact(['shared', 'locations', 'providers', 'labels', 'ip_address'])); + return view('shared.edit', compact(['shared', 'labels', 'ip_address'])); } public function update(Request $request, Shared $shared) @@ -212,41 +164,21 @@ class SharedController extends Controller $as_usd = $pricing->convertToUSD($request->price, $request->currency); - DB::table('pricings') - ->where('service_id', $request->id) - ->update([ - 'currency' => $request->currency, - 'price' => $request->price, - 'term' => $request->payment_term, - 'as_usd' => $as_usd, - 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), - 'next_due_date' => $request->next_due_date, - ]); + $pricing->updatePricing($request->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); - $deleted = DB::table('labels_assigned')->where('service_id', '=', $request->id)->delete(); + Labels::deleteLabelsAssignedTo($request->id); - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $request->id); - for ($i = 1; $i <= 4; $i++) { - if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned ( label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $request->id]); - } - } + Cache::forget("labels_for_service.{$request->id}"); - $delete_ip = DB::table('ips')->where('service_id', '=', $request->id)->delete(); + IPs::deleteIPsAssignedTo($request->id); if (isset($request->dedicated_ip)) { - DB::insert('INSERT INTO ips (id, address, service_id, is_ipv4) values (?, ?, ?, ?)', [ - Str::random(8), - $request->dedicated_ip, - $request->id, - (filter_var($request->dedicated_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1 - ]); + IPs::insertIP($request->id, $request->dedicated_ip); } - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Home::homePageCacheForget(); return redirect()->route('shared.index') ->with('success', 'Shared hosting updated Successfully.'); @@ -254,21 +186,19 @@ class SharedController extends Controller public function destroy(Shared $shared) { - $id = $shared->id; - $items = Shared::find($id); + $shared_id = $shared->id; + $items = Shared::find($shared_id); $items->delete(); $p = new Pricing(); - $p->deletePricing($shared->id); + $p->deletePricing($shared_id); - Labels::deleteLabelsAssignedTo($shared->id); + Labels::deleteLabelsAssignedTo($shared_id); - IPs::deleteIPsAssignedTo($shared->id); + IPs::deleteIPsAssignedTo($shared_id); - Cache::forget('services_count');//Main page services_count cache - Cache::forget('due_soon');//Main page due_soon cache - Cache::forget('recently_added');//Main page recently_added cache + Home::homePageCacheForget(); return redirect()->route('shared.index') ->with('success', 'Shared hosting was deleted Successfully.'); diff --git a/app/Http/Controllers/YabsController.php b/app/Http/Controllers/YabsController.php index ac885cb..4ac12f6 100644 --- a/app/Http/Controllers/YabsController.php +++ b/app/Http/Controllers/YabsController.php @@ -37,8 +37,8 @@ class YabsController extends Controller $yabs = $process->yabsOutputAsJson($request->server_id, $request->yabs); if (isset($yabs['error_id'])) { - return redirect()->route('yabs.index') - ->with('error', 'Problem inserting YABs. Error id ' . $yabs['error_id']); + return back()->withErrors(["yabs" => 'Problem inserting YABs. Error id ' . $yabs['error_id']])->withInput(); + //return redirect()->route('yabs.index')->with('error', 'Problem inserting YABs. Error id ' . $yabs['error_id']); } //No errors, do insert diff --git a/app/Models/DNS.php b/app/Models/DNS.php index 3b8bff3..70f7b63 100644 --- a/app/Models/DNS.php +++ b/app/Models/DNS.php @@ -4,6 +4,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\DB; class DNS extends Model { @@ -14,4 +16,11 @@ class DNS extends Model protected $fillable = ['id', 'service_id', 'hostname', 'dns_type', 'address', 'server_id', 'domain_id']; public static $dns_types = ['A', 'AAAA', 'DNAME', 'MX', 'NS', 'SOA', 'TXT', 'URI']; + + public static function dnsCount() + { + return Cache::remember('dns_count', now()->addMonth(1), function () { + return DB::table('d_n_s')->count(); + }); + } } diff --git a/app/Models/Domains.php b/app/Models/Domains.php index c2974d0..4e17810 100644 --- a/app/Models/Domains.php +++ b/app/Models/Domains.php @@ -4,6 +4,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\DB; class Domains extends Model { @@ -12,4 +13,29 @@ class Domains extends Model public $incrementing = false; protected $fillable = ['id', 'domain', 'extension', 'ns1', 'ns2', 'ns3', 'price', 'currency', 'payment_term', 'owned_since', 'provider_id', 'next_due_date']; + + public static function domainsDataIndexPage() + { + return DB::table('domains as d') + ->join('providers as p', 'd.provider_id', '=', 'p.id') + ->join('pricings as pr', 'd.id', '=', 'pr.service_id') + ->get(['d.*', 'p.name as provider_name', 'pr.*']); + } + + public static function domainsDataShowPage(string $domain_id) + { + return DB::table('domains as d') + ->join('providers as p', 'd.provider_id', '=', 'p.id') + ->join('pricings as pr', 'd.id', '=', 'pr.service_id') + ->where('d.id', '=', $domain_id) + ->get(['d.*', 'p.name as provider_name', 'pr.*']); + } + + public static function domainsDataEditPage(string $domain_id) + { + return DB::table('domains as d') + ->join('pricings as pr', 'd.id', '=', 'pr.service_id') + ->where('d.id', '=', $domain_id) + ->get(['d.*', 'pr.*']); + } } diff --git a/app/Models/Home.php b/app/Models/Home.php new file mode 100644 index 0000000..30586ce --- /dev/null +++ b/app/Models/Home.php @@ -0,0 +1,190 @@ +addHour(6), function () { + return DB::table('pricings') + ->select('service_type', DB::raw('COUNT(*) as amount')) + ->groupBy('service_type') + ->where('active', '=', 1) + ->get(); + }); + } + + public static function dueSoonData() + { + return Cache::remember('due_soon', now()->addHour(6), function () { + return DB::table('pricings as p') + ->leftJoin('servers as s', 'p.service_id', '=', 's.id') + ->leftJoin('shared_hosting as sh', 'p.service_id', '=', 'sh.id') + ->leftJoin('reseller_hosting as r', 'p.service_id', '=', 'r.id') + ->leftJoin('domains as d', 'p.service_id', '=', 'd.id') + ->leftJoin('misc_services as ms', 'p.service_id', '=', 'ms.id') + ->leftJoin('seedboxes as sb', 'p.service_id', '=', 'sb.id') + ->where('p.active', '=', 1) + ->orderBy('next_due_date', 'ASC') + ->limit(Session::get('due_soon_amount')) + ->get(['p.*', 's.hostname', 'd.domain', 'd.extension', 'r.main_domain as reseller', 'sh.main_domain', 'ms.name', 'sb.title']); + }); + } + + public static function serverSummary() + { + return Cache::remember('servers_summary', now()->addHour(6), function () { + $cpu_sum = DB::table('servers')->get()->where('active', '=', 1)->sum('cpu'); + $ram_mb = DB::table('servers')->get()->where('active', '=', 1)->sum('ram_as_mb'); + $disk_gb = DB::table('servers')->get()->where('active', '=', 1)->sum('disk_as_gb'); + $bandwidth = DB::table('servers')->get()->where('active', '=', 1)->sum('bandwidth'); + $locations_sum = DB::table('servers')->get()->where('active', '=', 1)->groupBy('location_id')->count(); + $providers_sum = DB::table('servers')->get()->where('active', '=', 1)->groupBy('provider_id')->count(); + return array( + 'cpu_sum' => $cpu_sum, + 'ram_mb_sum' => $ram_mb, + 'disk_gb_sum' => $disk_gb, + 'bandwidth_sum' => $bandwidth, + 'locations_sum' => $locations_sum, + 'providers_sum' => $providers_sum, + ); + }); + } + + public static function recentlyAdded() + { + return Cache::remember('recently_added', now()->addHour(6), function () { + return DB::table('pricings as p') + ->leftJoin('servers as s', 'p.service_id', '=', 's.id') + ->leftJoin('shared_hosting as sh', 'p.service_id', '=', 'sh.id') + ->leftJoin('reseller_hosting as r', 'p.service_id', '=', 'r.id') + ->leftJoin('domains as d', 'p.service_id', '=', 'd.id') + ->leftJoin('misc_services as ms', 'p.service_id', '=', 'ms.id') + ->leftJoin('seedboxes as sb', 'p.service_id', '=', 'sb.id') + ->where('p.active', '=', 1) + ->orderBy('created_at', 'DESC') + ->limit(Session::get('recently_added_amount')) + ->get(['p.*', 's.hostname', 'd.domain', 'd.extension', 'r.main_domain as reseller', 'sh.main_domain', 'ms.name', 'sb.title']); + }); + } + + public static function doDueSoon($due_soon) + { + $pricing = new Pricing(); + $count = $altered_due_soon = 0; + foreach ($due_soon as $service) { + if (Carbon::createFromFormat('Y-m-d', $service->next_due_date)->isPast()) { + $months = $pricing->termAsMonths($service->term);//Get months for term to update the next due date to + $new_due_date = Carbon::createFromFormat('Y-m-d', $service->next_due_date)->addMonths($months)->format('Y-m-d'); + DB::table('pricings')//Update the DB + ->where('service_id', $service->service_id) + ->update(['next_due_date' => $new_due_date]); + $due_soon[$count]->next_due_date = $new_due_date;//Update array being sent to view + $altered_due_soon = 1; + } else { + break;//Break because if this date isnt past than the ones after it in the loop wont be either + } + $count++; + } + + if ($altered_due_soon === 1) {//Made changes to due soon so re-write it + Cache::put('due_soon', $due_soon); + } + + return $due_soon; + } + + public static function breakdownPricing($all_pricing): array + { + $pricing = json_decode($all_pricing, true); + + $total_cost_weekly = $total_cost_pm = $inactive_count = 0; + foreach ($pricing as $price) { + if ($price['active'] === 1) { + if ($price['term'] === 1) {//1 month + $total_cost_weekly += ($price['as_usd'] / 4); + $total_cost_pm += $price['as_usd']; + } elseif ($price['term'] === 2) {//3 months + $total_cost_weekly += ($price['as_usd'] / 12); + $total_cost_pm += ($price['as_usd'] / 3); + } elseif ($price['term'] === 3) {// 6 month + $total_cost_weekly += ($price['as_usd'] / 24); + $total_cost_pm += ($price['as_usd'] / 6); + } elseif ($price['term'] === 4) {// 1 year + $total_cost_weekly += ($price['as_usd'] / 48); + $total_cost_pm += ($price['as_usd'] / 12); + } elseif ($price['term'] === 5) {//2 years + $total_cost_weekly += ($price['as_usd'] / 96); + $total_cost_pm += ($price['as_usd'] / 24); + } elseif ($price['term'] === 6) {//3 years + $total_cost_weekly += ($price['as_usd'] / 144); + $total_cost_pm += ($price['as_usd'] / 36); + } + } else { + $inactive_count++; + } + } + $total_cost_yearly = ($total_cost_pm * 12); + + return array( + 'total_cost_weekly' => $total_cost_weekly, + 'total_cost_montly' => $total_cost_pm, + 'total_cost_yearly' => $total_cost_yearly, + 'inactive_count' => $inactive_count, + ); + } + + public static function doServicesCount($services_count): array + { + $servers_count = $domains_count = $shared_count = $reseller_count = $other_count = $seedbox_count = $total_services = 0; + + $services_count = json_decode($services_count, true); + + foreach ($services_count as $sc) { + $total_services += $sc['amount']; + if ($sc['service_type'] === 1) { + $servers_count = $sc['amount']; + } else if ($sc['service_type'] === 2) { + $shared_count = $sc['amount']; + } else if ($sc['service_type'] === 3) { + $reseller_count = $sc['amount']; + } else if ($sc['service_type'] === 4) { + $domains_count = $sc['amount']; + } else if ($sc['service_type'] === 5) { + $other_count = $sc['amount']; + } else if ($sc['service_type'] === 6) { + $seedbox_count = $sc['amount']; + } + } + + return array( + 'servers' => $servers_count, + 'shared' => $shared_count, + 'reseller' => $reseller_count, + 'domains' => $domains_count, + 'other' => $other_count, + 'seedbox' => $seedbox_count, + 'total' => $total_services + ); + } + + +} diff --git a/app/Models/IPs.php b/app/Models/IPs.php index 8ebb264..66e7053 100644 --- a/app/Models/IPs.php +++ b/app/Models/IPs.php @@ -4,7 +4,9 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; class IPs extends Model { @@ -21,4 +23,26 @@ class IPs extends Model DB::table('ips')->where('service_id', '=', $service_id)->delete(); } + public static function insertIP(string $service_id, string $address) + { + self::create( + [ + 'id' => Str::random(8), + 'service_id' => $service_id, + 'address' => $address, + 'is_ipv4' => (filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1, + 'active' => 1 + ] + ); + } + + public static function ipsForServer(string $server_id) + { + return Cache::remember("ip_addresses.$server_id", now()->addHour(1), function () use ($server_id) { + return json_decode(DB::table('ips as i') + ->where('i.service_id', '=', $server_id) + ->get(), true); + }); + } + } diff --git a/app/Models/Labels.php b/app/Models/Labels.php index 68623b7..8c7a2fc 100644 --- a/app/Models/Labels.php +++ b/app/Models/Labels.php @@ -4,6 +4,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; class Labels extends Model @@ -23,5 +24,31 @@ class Labels extends Model { DB::table('labels_assigned')->where('label_id', '=', $label_id)->delete(); } - + + public static function insertLabelsAssigned(array $labels_array, string $service_id) + { + for ($i = 1; $i <= 4; $i++) { + if (!is_null($labels_array[($i - 1)])) { + DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $service_id]); + } + } + } + + public static function labelsCount() + { + return Cache::remember('labels_count', now()->addMonth(1), function () { + return DB::table('labels')->count(); + }); + } + + public static function labelsForService(string $service_id) + { + return Cache::remember("labels_for_service.$service_id", now()->addMinute(5), function () use ($service_id) { + return DB::table('labels_assigned as l') + ->join('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $service_id) + ->get(['labels.id', 'labels.label']); + }); + } + } diff --git a/app/Models/Locations.php b/app/Models/Locations.php index 3151bc2..9956ebf 100644 --- a/app/Models/Locations.php +++ b/app/Models/Locations.php @@ -4,6 +4,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\DB; class Locations extends Model { @@ -12,4 +14,11 @@ class Locations extends Model protected $fillable = ['name']; protected $table = 'locations'; + + public static function allLocations(): array + { + return Cache::remember("locations", now()->addMonth(1), function () { + return DB::table('locations')->get()->toArray(); + }); + } } diff --git a/app/Models/OS.php b/app/Models/OS.php index 6e28104..9b2e7e5 100644 --- a/app/Models/OS.php +++ b/app/Models/OS.php @@ -4,6 +4,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\DB; class OS extends Model { @@ -12,4 +14,11 @@ class OS extends Model protected $fillable = ['name']; protected $table = 'os'; + + public static function allOS(): array + { + return Cache::remember("operating_systems", now()->addMonth(1), function () { + return DB::table('os')->get()->toArray(); + }); + } } diff --git a/app/Models/Pricing.php b/app/Models/Pricing.php index 15efbdb..e021362 100644 --- a/app/Models/Pricing.php +++ b/app/Models/Pricing.php @@ -4,7 +4,9 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Session; class Pricing extends Model { @@ -75,4 +77,52 @@ class Pricing extends Model { DB::table('pricings')->where('service_id', '=', $id)->delete(); } + + public function insertPricing(int $type, string $service_id, string $currency, float $price, int $term, float $as_usd, string $next_due_date, int $is_active = 1) + { + return self::create([ + 'service_type' => $type, + 'service_id' => $service_id, + 'currency' => $currency, + 'price' => $price, + 'term' => $term, + 'as_usd' => $as_usd, + 'usd_per_month' => $this->costAsPerMonth($as_usd, $term), + 'next_due_date' => $next_due_date, + 'active' => ($is_active) ? 1 : 0 + ]); + } + + public function updatePricing(string $service_id, string $currency, float $price, int $term, float $as_usd, string $next_due_date, int $is_active = 1) + { + return DB::table('pricings') + ->where('service_id', $service_id) + ->update([ + 'currency' => $currency, + 'price' => $price, + 'term' => $term, + 'as_usd' => $as_usd, + 'usd_per_month' => $this->costAsPerMonth($as_usd, $term), + 'next_due_date' => $next_due_date, + 'active' => ($is_active) ? 1 : 0 + ]); + } + + public static function allPricing() + { + return Cache::remember('all_pricing', now()->addWeek(1), function () { + return DB::table('pricings') + ->get(); + }); + } + + public static function pricingForService(string $service_id) + { + return Cache::remember("service_pricing.$service_id", now()->addWeek(1), function () use ($service_id) { + return DB::table('servers as s') + ->join('pricings as p', 's.id', '=', 'p.service_id') + ->where('s.id', '=', $service_id) + ->get(['s.*', 'p.*']); + }); + } } diff --git a/app/Models/Providers.php b/app/Models/Providers.php index 8a70ebd..e310f3a 100644 --- a/app/Models/Providers.php +++ b/app/Models/Providers.php @@ -4,6 +4,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\DB; class Providers extends Model { @@ -12,4 +14,31 @@ class Providers extends Model protected $fillable = ['name']; protected $table = 'providers'; + + public static function allProviders(): array + { + return Cache::remember("providers", now()->addMonth(1), function () { + return DB::table('providers')->get()->toArray(); + }); + } + + public static function showServicesForProvider($provider): array + { + $servers = DB::table('servers as s') + ->where('s.provider_id', '=', $provider) + ->get(['s.id', 's.hostname']) + ->toArray(); + + $shared = DB::table('shared_hosting as s') + ->where('s.provider_id', '=', $provider) + ->get(['s.id', 's.main_domain as main_domain_shared']) + ->toArray(); + + $reseller = DB::table('reseller_hosting as r') + ->where('r.provider_id', '=', $provider) + ->get(['r.id', 'r.main_domain as main_domain_reseller']) + ->toArray(); + + return array_merge($servers, $shared, $reseller); + } } diff --git a/app/Models/Reseller.php b/app/Models/Reseller.php index 5450568..b3dfd31 100644 --- a/app/Models/Reseller.php +++ b/app/Models/Reseller.php @@ -4,6 +4,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\DB; class Reseller extends Model { @@ -14,4 +16,33 @@ class Reseller extends Model protected $fillable = ['id', 'active', 'accounts', 'main_domain', 'has_dedicated_ip', 'ip', 'reseller_type', 'provider_id', 'location_id', 'bandwidth', 'disk', 'disk_type', 'disk_as_gb', 'domains_limit', 'subdomains_limit', 'ftp_limit', 'email_limit', 'db_limit', 'was_promo', 'owned_since']; public $incrementing = false; + + public static function resellerDataIndexPage() + { + return DB::table('reseller_hosting as s') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->get(['s.*', 'p.name as provider_name', 'pr.*', 'l.name as location']); + } + + public static function resellerDataShowPage(string $reseller_id) + { + return DB::table('reseller_hosting as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->where('s.id', '=', $reseller_id) + ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*']); + } + + public static function resellerDataEditPage(string $reseller_id) + { + return DB::table('reseller_hosting as s') + ->join('pricings as p', 's.id', '=', 'p.service_id') + ->where('s.id', '=', $reseller_id) + ->get(['s.*', 'p.*']); + + } + } diff --git a/app/Models/SeedBoxes.php b/app/Models/SeedBoxes.php new file mode 100644 index 0000000..4582881 --- /dev/null +++ b/app/Models/SeedBoxes.php @@ -0,0 +1,50 @@ +join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->get(['s.*', 'p.name as provider_name', 'pr.*', 'l.name as location']); + } + + public static function seedBoxDataShowPage(string $seed_box_id) + { + return DB::table('seedboxes as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->where('s.id', '=', $seed_box_id) + ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*']); + } + + public static function seedBoxEditDataPage(string $seed_box_id) + { + return DB::table('seedboxes as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->where('s.id', '=', $seed_box_id) + ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*']); + } + + +} diff --git a/app/Models/Server.php b/app/Models/Server.php index b8ffe8b..d807bd5 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -4,6 +4,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\DB; class Server extends Model { @@ -11,7 +13,7 @@ class Server extends Model public $incrementing = false; - protected $fillable = ['id', 'hostname', 'ipv4', 'ipv6', 'server_type', 'os_id', 'location_id', 'provider_id', 'ram', 'disk', 'ram_type', 'disk_type', 'ns1', 'ns2', 'label', 'bandwidth', 'ram_as_mb', 'disk_as_gb', 'has_yabs', 'was_promo', 'owned_since', 'ssh', 'active','show_public']; + protected $fillable = ['id', 'hostname', 'ipv4', 'ipv6', 'server_type', 'os_id', 'location_id', 'provider_id', 'ram', 'disk', 'ram_type', 'disk_type', 'ns1', 'ns2', 'label', 'bandwidth', 'ram_as_mb', 'disk_as_gb', 'has_yabs', 'was_promo', 'owned_since', 'ssh', 'active', 'show_public']; /** * @var mixed */ @@ -27,6 +29,8 @@ class Server extends Model return "DEDI"; } elseif ($type === 4) { return "LXC"; + } elseif ($type === 6) { + return "VMware"; } else { return "SEMI-DEDI"; } @@ -150,4 +154,95 @@ class Server extends Model return $str; } + public static function serverRelatedCacheForget(): void + { + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + Cache::forget('all_active_servers');//all servers cache + Cache::forget('non_active_servers');//all servers cache + Cache::forget('servers_summary');//servers summary cache + Cache::forget('public_server_data');//public servers + Cache::forget('all_pricing');//All pricing + } + + public static function serverSpecificCacheForget(string $server_id): void + { + Cache::forget("server_show_data.$server_id");//data for show + Cache::forget("ip_addresses.$server_id");//ips for server + Cache::forget("labels_for_service.$server_id");//labels for server + Cache::forget("service_pricing.$server_id");//Pricing + } + + public static function activeServersDataIndexPage() + { + return Cache::remember('all_active_servers', now()->addMonth(1), function () { + return DB::table('servers as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('os as o', 's.os_id', '=', 'o.id') + ->where('s.active', '=', 1) + ->get(['s.*', 'pr.currency', 'pr.price', 'pr.term', 'pr.as_usd', 'pr.next_due_date', 'p.name as provider_name', 'l.name as location', 'o.name as os_name']); + }); + } + + public static function nonActiveServersDataIndexPage() + { + return Cache::remember('non_active_servers', now()->addMonth(1), function () { + return DB::table('servers as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('os as o', 's.os_id', '=', 'o.id') + ->where('s.active', '=', 0) + ->get(['s.*', 'pr.currency', 'pr.price', 'pr.term', 'pr.as_usd', 'p.name as provider_name', 'l.name as location', 'o.name as os_name']); + }); + } + + public static function serverDataShowPage(string $server_id) + { + return Cache::remember("server_show_data.$server_id", now()->addDay(1), function () use ($server_id) { + return DB::table('servers as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('os as o', 's.os_id', '=', 'o.id') + ->Leftjoin('yabs as y', 's.id', '=', 'y.server_id') + ->Leftjoin('disk_speed as ds', 'y.id', '=', 'ds.id') + ->where('s.id', '=', $server_id) + ->get(['s.*', 'p.name as provider', 'l.name as location', 'o.name as os_name', 'pr.*', 'y.*', 'ds.*']); + }); + } + + public static function publicServerData() + { + return Cache::remember('public_server_data', now()->addMonth(1), function () { + return DB::table('servers as s') + ->Join('pricings as pr', 's.id', '=', 'pr.service_id') + ->Join('providers as p', 's.provider_id', '=', 'p.id') + ->Join('locations as l', 's.location_id', '=', 'l.id') + ->Join('os as o', 's.os_id', '=', 'o.id') + ->LeftJoin('ips as i', 's.id', '=', 'i.service_id') + ->LeftJoin('yabs as y', 's.id', '=', 'y.server_id') + ->LeftJoin('disk_speed as ds', 'y.id', '=', 'ds.id') + ->where('s.show_public', '=', 1) + ->get(['pr.currency', 'pr.price', 'pr.term', 'pr.as_usd', 'pr.next_due_date', 'pr.service_id', 'p.name as provider_name', 'l.name as location', 'o.name as os_name', 'y.*', 'y.id as yabs_id', 'ds.*', 's.*', 'i.address as ip', 'i.is_ipv4']); + }); + } + + public static function serverCompareData(string $server_id) + { + return Cache::remember("server_compare.$server_id", now()->addMonth(1), function () use ($server_id) { + return DB::table('servers as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->Join('yabs as y', 's.id', '=', 'y.server_id') + ->Join('disk_speed as ds', 'y.id', '=', 'ds.id') + ->where('s.id', '=', $server_id) + ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*', 'y.*', 'y.id as yabs_id', 'ds.*']); + }); + } + } diff --git a/app/Models/Settings.php b/app/Models/Settings.php index 78ecdc4..1f584b4 100644 --- a/app/Models/Settings.php +++ b/app/Models/Settings.php @@ -4,6 +4,9 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Session; class Settings extends Model { @@ -12,4 +15,33 @@ class Settings extends Model protected $table = 'settings'; protected $fillable = ['id', 'show_versions_footer', 'show_servers_public']; + + public static function getSettings() + { + return Cache::remember('settings', now()->addMinute(1), function () { + return DB::table('settings') + ->where('id', '=', 1) + ->get(); + }); + } + + public static function setSettingsToSession($settings): void + { + Session::put('dark_mode', $settings[0]->dark_mode ?? 0); + Session::put('timer_version_footer', $settings[0]->show_versions_footer ?? 1); + Session::put('show_servers_public', $settings[0]->show_servers_public ?? 0); + Session::put('show_server_value_ip', $settings[0]->show_server_value_ip ?? 0); + Session::put('show_server_value_hostname', $settings[0]->show_server_value_hostname ?? 0); + Session::put('show_server_value_price', $settings[0]->show_server_value_price ?? 0); + Session::put('show_server_value_yabs', $settings[0]->show_server_value_yabs ?? 0); + Session::put('show_server_value_provider', $settings[0]->show_server_value_provider ?? 0); + Session::put('show_server_value_location', $settings[0]->show_server_value_location ?? 0); + Session::put('default_currency', $settings[0]->default_currency ?? 'USD'); + Session::put('default_server_os', $settings[0]->default_server_os ?? 1); + Session::put('due_soon_amount', $settings[0]->due_soon_amount ?? 6); + Session::put('recently_added_amount', $settings[0]->recently_added_amount ?? 6); + Session::save(); + } + + } diff --git a/app/Models/Shared.php b/app/Models/Shared.php index b0805a0..267244d 100644 --- a/app/Models/Shared.php +++ b/app/Models/Shared.php @@ -4,6 +4,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\DB; class Shared extends Model { @@ -14,4 +16,31 @@ class Shared extends Model protected $fillable = ['id', 'active', 'main_domain', 'has_dedicated_ip', 'ip', 'shared_type', 'provider_id', 'location_id', 'bandwidth', 'disk', 'disk_type', 'disk_as_gb', 'domains_limit', 'subdomains_limit', 'ftp_limit', 'email_limit', 'db_limit', 'was_promo', 'owned_since']; public $incrementing = false; + + public static function sharedDataIndexPage() + { + return DB::table('shared_hosting as s') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->get(['s.*', 'p.name as provider_name', 'pr.*', 'l.name as location']); + } + + public static function sharedDataShowPage(string $shared_id) + { + return DB::table('shared_hosting as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->where('s.id', '=', $shared_id) + ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*']); + } + + public static function sharedEditDataPage(string $shared_id) + { + return DB::table('shared_hosting as s') + ->join('pricings as p', 's.id', '=', 'p.service_id') + ->where('s.id', '=', $shared_id) + ->get(['s.*', 'p.*']); + } } diff --git a/app/Models/Yabs.php b/app/Models/Yabs.php index 2c5e8e2..b93186d 100644 --- a/app/Models/Yabs.php +++ b/app/Models/Yabs.php @@ -4,6 +4,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\DB; class Yabs extends Model { @@ -14,4 +16,23 @@ class Yabs extends Model protected $table = 'yabs'; protected $fillable = ['id', 'server_id', 'has_ipv6', 'aes', 'vm', 'output_date', 'cpu_cores', 'cpu_freq', 'cpu_model', 'ram', 'ram_type', 'ram_mb', 'disk', 'disk_type', 'disk_gb', 'gb5_single', 'gb5_multi', 'gb5_id', '4k', '4k_type', '4k_as_mbps', '64k', '64k_type', '64k_as_mbps', '512k', '512k_type', '512k_as_mbps', '1m', '1m_type', '1m_as_mbps', 'location', 'send', 'send_type', 'send_as_mbps', 'receive', 'receive_type', 'receive_as_mbps']; + + public static function networkSpeedsForServer(string $server_id) + { + return Cache::remember("network_speeds.$server_id", now()->addMonth(1), function () use ($server_id) { + return json_decode(DB::table('network_speed') + ->where('network_speed.server_id', '=', $server_id) + ->get(), true); + }); + } + + public static function serverCompareNetwork(string $yabs_id) + { + return Cache::remember("compare_network_speeds.$yabs_id", now()->addMonth(1), function () use ($yabs_id) { + return DB::table('network_speed') + ->where('id', '=', $yabs_id) + ->get(); + }); + } + } diff --git a/app/Process.php b/app/Process.php index 5a0a8b4..c0b6706 100644 --- a/app/Process.php +++ b/app/Process.php @@ -192,24 +192,43 @@ class Process } $version_array = explode(' ', preg_replace('!\s+!', ' ', $this->trimRemoveR($array[2]))); - if ($version_array[1] === 'v2021-12-28' || $version_array[1] === 'v2022-02-18' || $version_array[1] === 'v2022-04-30') {//YABs version - $cpu = $this->trimRemoveR(str_replace(':', '', strstr($array[10], ': '))); - $cpu_spec = explode(' ', strstr($array[11], ': '));//: 2 @ 3792.872 MHz + if ($version_array[1] === 'v2021-12-28' || $version_array[1] === 'v2022-02-18' || $version_array[1] === 'v2022-04-30' || $version_array[1] === 'v2022-05-06') {//YABs version + if ($version_array[1] === 'v2022-05-06') { + $cpu = $this->trimRemoveR(str_replace(':', '', strstr($array[11], ': '))); + $cpu_spec = explode(' ', strstr($array[12], ': '));//: 2 @ 3792.872 MHz + $ram_line = $this->trimRemoveR(str_replace(':', '', strstr($array[15], ': '))); + $ram = (float)$ram_line; + $ram_type = $this->datatype($ram_line); + $swap_line = $this->trimRemoveR(str_replace(':', '', strstr($array[16], ': '))); + $swap = (float)$swap_line; + $swap_type = $this->datatype($swap_line); + $disk_line = $this->trimRemoveR(str_replace(':', '', strstr($array[17], ': '))); + $disk = (float)$disk_line; + $disk_type = $this->datatype($disk_line); + $io_3 = explode(' ', preg_replace('!\s+!', ' ', $array[27])); + $io_6 = explode(' ', preg_replace('!\s+!', ' ', $array[33])); + (str_contains($array[13], 'Enabled')) ? $aes_ni = true : $aes_ni = false; + (str_contains($array[14], 'Enabled')) ? $vm_amd_v = true : $vm_amd_v = false; + } else { + $cpu = $this->trimRemoveR(str_replace(':', '', strstr($array[10], ': '))); + $cpu_spec = explode(' ', strstr($array[11], ': '));//: 2 @ 3792.872 MHz + $ram_line = $this->trimRemoveR(str_replace(':', '', strstr($array[14], ': '))); + $ram = (float)$ram_line; + $ram_type = $this->datatype($ram_line); + $swap_line = $this->trimRemoveR(str_replace(':', '', strstr($array[15], ': '))); + $swap = (float)$swap_line; + $swap_type = $this->datatype($swap_line); + $disk_line = $this->trimRemoveR(str_replace(':', '', strstr($array[16], ': '))); + $disk = (float)$disk_line; + $disk_type = $this->datatype($disk_line); + $io_3 = explode(' ', preg_replace('!\s+!', ' ', $array[24])); + $io_6 = explode(' ', preg_replace('!\s+!', ' ', $array[30])); + (str_contains($array[12], 'Enabled')) ? $aes_ni = true : $aes_ni = false; + (str_contains($array[13], 'Enabled')) ? $vm_amd_v = true : $vm_amd_v = false; + } $cpu_cores = $cpu_spec[1]; $cpu_freq = $cpu_spec[3]; - $ram_line = $this->trimRemoveR(str_replace(':', '', strstr($array[14], ': '))); - $ram = (float)$ram_line; - $ram_type = $this->datatype($ram_line); - $swap_line = $this->trimRemoveR(str_replace(':', '', strstr($array[15], ': '))); - $swap = (float)$swap_line; - $swap_type = $this->datatype($swap_line); - $disk_line = $this->trimRemoveR(str_replace(':', '', strstr($array[16], ': '))); - $disk = (float)$disk_line; - $disk_type = $this->datatype($disk_line); - $io_3 = explode(' ', preg_replace('!\s+!', ' ', $array[24])); - $io_6 = explode(' ', preg_replace('!\s+!', ' ', $array[30])); - (str_contains($array[12], 'Enabled')) ? $aes_ni = true : $aes_ni = false; - (str_contains($array[13], 'Enabled')) ? $vm_amd_v = true : $vm_amd_v = false; + $d4k_as_mbps = $this->diskSpeedAsMbps($io_3[3], $this->floatValue($io_3[2])); $d64k_as_mbps = $this->diskSpeedAsMbps($io_3[7], $this->floatValue($io_3[6])); @@ -231,48 +250,94 @@ class Process ); if (isset($array[40])) { - if ($array[45] === "Geekbench 5 Benchmark Test:\r") { - //No ipv6 - //Has short ipv4 network speed testing (-r) - $has_ipv6 = false; - $start_st = 36; - $end_st = 43; - $gb_s = 49; - $gb_m = 50; - $gb_url = 51; - } elseif ($array[45] === "Geekbench 4 Benchmark Test:\r") { - return array('error_id' => 6, 'error_message' => 'GeekBench 5 only allowed'); - } elseif ($array[45] === "Geekbench 5 test failed. Run manually to determine cause.\r") { - return array('error_id' => 7, 'error_message' => 'GeekBench test failed'); - } elseif ($array[40] === "Geekbench 5 Benchmark Test:\r") { - //No ipv6 - //Has full ipv4 network speed testing - $has_ipv6 = false; - $start_st = 36; - $end_st = 38; - $gb_s = 44; - $gb_m = 45; - $gb_url = 46; - } elseif ($array[40] === "iperf3 Network Speed Tests (IPv6):\r") { - //HAS ipv6 - //Has short ipv4 & ipv6 network speed testing - $has_ipv6 = true; - $start_st = 36; - $end_st = 38; - $gb_s = 52; - $gb_m = 53; - $gb_url = 54; - } elseif ($array[56] === "Geekbench 5 Benchmark Test:\r") { - //HAS ipv6 - //Has full ipv4 & ipv6 network speed testing - $has_ipv6 = true; - $start_st = 36; - $end_st = 43; - $gb_s = 60; - $gb_m = 61; - $gb_url = 62; + if ($version_array[1] === 'v2022-05-06') { + if ($array[43] === "Geekbench 5 Benchmark Test:\r") { + //No ipv6 + //Has short ipv4 network speed testing (-r) + $has_ipv6 = false; + $start_st = 39; + $end_st = 41; + $gb_s = 47; + $gb_m = 48; + $gb_url = 49; + } elseif ($array[45] === "Geekbench 4 Benchmark Test:\r") { + return array('error_id' => 6, 'error_message' => 'GeekBench 5 only allowed'); + } elseif ($array[45] === "Geekbench 5 test failed. Run manually to determine cause.\r") { + return array('error_id' => 7, 'error_message' => 'GeekBench test failed'); + } elseif ($array[46] === "Geekbench 5 Benchmark Test:\r") { + //No ipv6 + //Has full ipv4 network speed testing + $has_ipv6 = false; + $start_st = 39; + $end_st = 44; + $gb_s = 44; + $gb_m = 45; + $gb_url = 46; + } elseif ($array[43] === "iperf3 Network Speed Tests (IPv6):\r") { + //HAS ipv6 + //Has short ipv4 & ipv6 network speed testing + $has_ipv6 = true; + $start_st = 39; + $end_st = 41; + $gb_s = 55; + $gb_m = 56; + $gb_url = 57; + } elseif ($array[56] === "Geekbench 5 Benchmark Test:\r") { + //HAS ipv6 + //Has full ipv4 & ipv6 network speed testing + $has_ipv6 = true; + $start_st = 39; + $end_st = 44; + $gb_s = 60; + $gb_m = 61; + $gb_url = 62; + } else { + return array('error_id' => 5, 'error_message' => 'Not correct YABs command output'); + } } else { - return array('error_id' => 5, 'error_message' => 'Not correct YABs command output'); + if ($array[45] === "Geekbench 5 Benchmark Test:\r") { + //No ipv6 + //Has short ipv4 network speed testing (-r) + $has_ipv6 = false; + $start_st = 36; + $end_st = 43; + $gb_s = 49; + $gb_m = 50; + $gb_url = 51; + } elseif ($array[45] === "Geekbench 4 Benchmark Test:\r") { + return array('error_id' => 6, 'error_message' => 'GeekBench 5 only allowed'); + } elseif ($array[45] === "Geekbench 5 test failed. Run manually to determine cause.\r") { + return array('error_id' => 7, 'error_message' => 'GeekBench test failed'); + } elseif ($array[40] === "Geekbench 5 Benchmark Test:\r") { + //No ipv6 + //Has full ipv4 network speed testing + $has_ipv6 = false; + $start_st = 36; + $end_st = 38; + $gb_s = 44; + $gb_m = 45; + $gb_url = 46; + } elseif ($array[40] === "iperf3 Network Speed Tests (IPv6):\r") { + //HAS ipv6 + //Has short ipv4 & ipv6 network speed testing + $has_ipv6 = true; + $start_st = 36; + $end_st = 38; + $gb_s = 52; + $gb_m = 53; + $gb_url = 54; + } elseif ($array[56] === "Geekbench 5 Benchmark Test:\r") { + //HAS ipv6 + //Has full ipv4 & ipv6 network speed testing + $has_ipv6 = true; + $start_st = 36; + $end_st = 43; + $gb_s = 60; + $gb_m = 61; + $gb_url = 62; + } else { + return array('error_id' => 5, 'error_message' => 'Not correct YABs command output'); + } } } else { return array('error_id' => 4, 'error_message' => 'Not correct formatting'); diff --git a/app/View/Components/LocationsSelect.php b/app/View/Components/LocationsSelect.php index 1b2b9d8..fecde4b 100644 --- a/app/View/Components/LocationsSelect.php +++ b/app/View/Components/LocationsSelect.php @@ -15,9 +15,7 @@ class LocationsSelect extends Component */ public function render() { - $all_locations = Cache::rememberForever('all_locations', function () { - return Locations::all(); - }); + $all_locations = Locations::allLocations(); return view('components.locations-select', [ 'locations' => $all_locations ]); diff --git a/app/View/Components/OsSelect.php b/app/View/Components/OsSelect.php index e7f8b07..2036155 100644 --- a/app/View/Components/OsSelect.php +++ b/app/View/Components/OsSelect.php @@ -10,11 +10,8 @@ class OsSelect extends Component { public function render() { - $all_os = Cache::rememberForever('all_os', function () { - return OS::all(); - }); return view('components.os-select', [ - 'os' => $all_os + 'os' => OS::allOS() ]); } } diff --git a/app/View/Components/ProvidersSelect.php b/app/View/Components/ProvidersSelect.php index f169257..64c45f8 100644 --- a/app/View/Components/ProvidersSelect.php +++ b/app/View/Components/ProvidersSelect.php @@ -16,9 +16,7 @@ class ProvidersSelect extends Component */ public function render() { - $all_providers = Cache::rememberForever('all_providers', function () { - return Providers::all(); - }); + $all_providers = Providers::allProviders(); return view('components.providers-select', [ 'providers' => $all_providers ]); diff --git a/database/migrations/2021_02_10_122904_create_servers_table.php b/database/migrations/2021_02_10_122904_create_servers_table.php index 85f7617..e3fb170 100644 --- a/database/migrations/2021_02_10_122904_create_servers_table.php +++ b/database/migrations/2021_02_10_122904_create_servers_table.php @@ -21,9 +21,9 @@ class CreateServersTable extends Migration $table->string('ns1')->nullable()->default(null); $table->string('ns2')->nullable()->default(null); $table->tinyInteger('server_type')->default(1); - $table->integer('os_id')->default(0); - $table->integer('provider_id')->default(9999); - $table->integer('location_id')->default(9999); + $table->unsignedBigInteger('os_id')->default(0); + $table->unsignedBigInteger('provider_id')->default(9999); + $table->unsignedBigInteger('location_id')->default(9999); $table->integer('ssh')->nullable()->default(22); $table->integer('bandwidth')->nullable(); $table->integer('ram')->default(1024); diff --git a/database/migrations/2022_02_01_233932_create_domains_table.php b/database/migrations/2022_02_01_233932_create_domains_table.php index a0841fe..2d437ce 100644 --- a/database/migrations/2022_02_01_233932_create_domains_table.php +++ b/database/migrations/2022_02_01_233932_create_domains_table.php @@ -21,7 +21,7 @@ class CreateDomainsTable extends Migration $table->string('ns1')->nullable(); $table->string('ns2')->nullable(); $table->string('ns3')->nullable(); - $table->integer('provider_id')->default(9999); + $table->unsignedBigInteger('provider_id')->default(9999); $table->date('owned_since')->nullable(); $table->timestamps(); }); diff --git a/database/migrations/2022_02_03_040140_create_shareds_table.php b/database/migrations/2022_02_03_040140_create_shareds_table.php index 30dd172..5a06026 100644 --- a/database/migrations/2022_02_03_040140_create_shareds_table.php +++ b/database/migrations/2022_02_03_040140_create_shareds_table.php @@ -18,8 +18,8 @@ class CreateSharedsTable extends Migration $table->tinyInteger('active')->default(1); $table->string('main_domain'); $table->string('shared_type')->nullable(); - $table->integer('provider_id')->default(9999); - $table->integer('location_id')->default(9999); + $table->unsignedBigInteger('provider_id')->default(9999); + $table->unsignedBigInteger('location_id')->default(9999); $table->integer('bandwidth')->nullable(); $table->integer('disk')->default(10); $table->char('disk_type', 2)->default('GB'); diff --git a/database/migrations/2022_02_03_040152_create_resellers_table.php b/database/migrations/2022_02_03_040152_create_resellers_table.php index e802712..43f9e12 100644 --- a/database/migrations/2022_02_03_040152_create_resellers_table.php +++ b/database/migrations/2022_02_03_040152_create_resellers_table.php @@ -19,8 +19,8 @@ class CreateResellersTable extends Migration $table->string('main_domain'); $table->integer('accounts')->default(1); $table->string('reseller_type')->nullable(); - $table->integer('provider_id')->default(9999); - $table->integer('location_id')->default(9999); + $table->unsignedBigInteger('provider_id')->default(9999); + $table->unsignedBigInteger('location_id')->default(9999); $table->integer('bandwidth')->nullable(); $table->integer('disk')->default(10); $table->char('disk_type', 2)->default('GB'); diff --git a/database/migrations/2022_05_09_114227_add_foreign_keys.php b/database/migrations/2022_05_09_114227_add_foreign_keys.php new file mode 100644 index 0000000..ee7764f --- /dev/null +++ b/database/migrations/2022_05_09_114227_add_foreign_keys.php @@ -0,0 +1,55 @@ +foreign('location_id','servers_fk_location')->references('id')->on('locations'); + //$table->foreign('provider_id','servers_fk_provider')->references('id')->on('providers'); + //$table->foreign('os_id','servers_fk_os')->references('id')->on('os'); + $table->foreign('id', 'servers_fk_pricing')->references('service_id')->on('pricings')->onDelete('cascade'); + }); + + Schema::table('shared_hosting', function (Blueprint $table) { + //$table->foreign('location_id','shared_fk_location')->references('id')->on('locations'); + //$table->foreign('provider_id','shared_fk_provider')->references('id')->on('providers'); + $table->foreign('id', 'shared_fk_pricing')->references('service_id')->on('pricings')->onDelete('cascade'); + }); + + Schema::table('reseller_hosting', function (Blueprint $table) { + //$table->foreign('location_id','reseller_fk_location')->references('id')->on('locations'); + //$table->foreign('provider_id','reseller_fk_provider')->references('id')->on('providers'); + $table->foreign('id', 'reseller_fk_pricing')->references('service_id')->on('pricings')->onDelete('cascade'); + }); + + Schema::table('domains', function (Blueprint $table) { + //$table->foreign('provider_id','domains_fk_provider')->references('id')->on('providers'); + $table->foreign('id', 'domains_fk_pricing')->references('service_id')->on('pricings')->onDelete('cascade'); + }); + + Schema::table('misc_services', function (Blueprint $table) { + $table->foreign('id', 'misc_fk_pricing')->references('service_id')->on('pricings')->onDelete('cascade'); + }); + + Schema::table('yabs', function (Blueprint $table) { + $table->foreign('server_id', 'yabs_fk_servers')->references('id')->on('servers'); + }); + + Schema::table('disk_speed', function (Blueprint $table) { + $table->foreign('id', 'ds_fk_yabs')->references('id')->on('yabs'); + }); + + Schema::table('network_speed', function (Blueprint $table) { + $table->foreign('id', 'ns_fk_yabs')->references('id')->on('yabs'); + }); + } + + public function down() + { + } +} diff --git a/database/migrations/2022_05_09_154509_add_dark_mode_setting.php b/database/migrations/2022_05_09_154509_add_dark_mode_setting.php new file mode 100644 index 0000000..7384254 --- /dev/null +++ b/database/migrations/2022_05_09_154509_add_dark_mode_setting.php @@ -0,0 +1,19 @@ +boolean('dark_mode')->default(false); + }); + } + + public function down() + { + } +} diff --git a/database/migrations/2022_05_15_105254_create_seedboxes_table.php b/database/migrations/2022_05_15_105254_create_seedboxes_table.php new file mode 100644 index 0000000..0bca195 --- /dev/null +++ b/database/migrations/2022_05_15_105254_create_seedboxes_table.php @@ -0,0 +1,44 @@ +char('id', 8)->primary(); + $table->tinyInteger('active')->default(1); + $table->string('title'); + $table->string('hostname')->nullable(); + $table->string('seed_box_type')->nullable(); + $table->unsignedBigInteger('provider_id')->default(9999); + $table->unsignedBigInteger('location_id')->default(9999); + $table->integer('bandwidth')->nullable(); + $table->integer('port_speed')->nullable(); + $table->integer('disk')->default(10); + $table->char('disk_type', 2)->default('GB'); + $table->integer('disk_as_gb')->nullable()->default(0); + $table->tinyInteger('was_promo')->default(0); + $table->date('owned_since')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('seedboxes'); + } +}; diff --git a/database/seeders/LocationsSeeder.php b/database/seeders/LocationsSeeder.php index fef05d3..b2f27ec 100644 --- a/database/seeders/LocationsSeeder.php +++ b/database/seeders/LocationsSeeder.php @@ -94,7 +94,9 @@ class LocationsSeeder extends Seeder ['name' => 'Washington, USA'], ['name' => 'Wellington, New Zealand'], ['name' => 'Zurich, Switzerland'], - ['name' => 'Quebec, Canada'] + ['name' => 'Quebec, Canada'], + ['name' => 'Kharkiv, Ukraine'], + ['name' => 'Sao Paulo, Brazil'], ]; DB::table('locations')->insert($locations); diff --git a/public/css/bootstrap-dark.min.css b/public/css/bootstrap-dark.min.css new file mode 100644 index 0000000..2a68b73 Binary files /dev/null and b/public/css/bootstrap-dark.min.css differ diff --git a/resources/views/components/locations-select.blade.php b/resources/views/components/locations-select.blade.php index 8c8cadb..87f3272 100644 --- a/resources/views/components/locations-select.blade.php +++ b/resources/views/components/locations-select.blade.php @@ -2,8 +2,9 @@
{{ $title ??'Location'}}
diff --git a/resources/views/components/os-select.blade.php b/resources/views/components/os-select.blade.php index 09749ad..fdbf0ee 100644 --- a/resources/views/components/os-select.blade.php +++ b/resources/views/components/os-select.blade.php @@ -2,8 +2,8 @@
{{ $title ??'OS'}}
diff --git a/resources/views/components/providers-select.blade.php b/resources/views/components/providers-select.blade.php index ebf8bd2..4f33d5f 100644 --- a/resources/views/components/providers-select.blade.php +++ b/resources/views/components/providers-select.blade.php @@ -2,8 +2,8 @@
{{ $title ??'Provider'}}
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 2ae96e4..5f21cf3 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -4,7 +4,7 @@ @if (Route::has('login')) @auth
-
+
@@ -14,7 +14,7 @@
-
+
@@ -24,7 +24,7 @@
-
+
@@ -34,7 +34,7 @@
-
+
@@ -44,7 +44,7 @@
-
+
@@ -54,7 +54,7 @@
-
+
@@ -132,7 +132,7 @@
-
+
@@ -142,7 +142,7 @@
-
+
@@ -154,7 +154,7 @@
-
+
@@ -173,7 +173,7 @@
-
+
@@ -185,7 +185,7 @@
-
+
@@ -195,7 +195,7 @@
-
+
@@ -237,6 +237,8 @@ {{$due_soon->domain}}.{{$due_soon->extension}} @elseif($due_soon->service_type === 5) {{$due_soon->name}} + @elseif($due_soon->service_type === 6) + {{$due_soon->title}} @endif @@ -250,6 +252,8 @@ Domain @elseif($due_soon->service_type === 5) Misc + @elseif($due_soon->service_type === 6) + Seedbox @endif @@ -276,6 +280,10 @@ + @elseif($due_soon->service_type === 6) + @endif @@ -319,6 +327,8 @@ {{$new->domain}}.{{$new->extension}} @elseif($new->service_type === 5) {{$new->name}} + @elseif($new->service_type === 6) + {{$new->title}} @endif @@ -332,15 +342,38 @@ Domain @elseif($new->service_type === 5) Misc + @elseif($new->service_type === 6) + Seedbox @endif {{Carbon\Carbon::parse($new->created_at)->diffForHumans()}} {{$new->price}} {{$new->currency}} {{\App\Process::paymentTermIntToString($new->term)}} - - - + @if($new->service_type === 1) + + @elseif($new->service_type === 2) + + @elseif($new->service_type === 3) + + @elseif($new->service_type === 4) + + @elseif($new->service_type === 5) + + @elseif($new->service_type === 6) + + @endif @endforeach diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index d3da691..17f71c4 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -10,7 +10,12 @@ @yield('title') - @if (config()->has('app.name')) {{ config('app.name') }} @else My idlers @endif - + @if(Session::get('dark_mode')) + + @else + + @endif + @yield('css_links') diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php index 7c75def..243e8d1 100644 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -36,6 +36,7 @@
  • Locations
  • OS
  • Providers
  • +
  • Seedboxes
  • YABs
  • Settings
  • Account
  • diff --git a/resources/views/seedboxes/create.blade.php b/resources/views/seedboxes/create.blade.php new file mode 100644 index 0000000..108a989 --- /dev/null +++ b/resources/views/seedboxes/create.blade.php @@ -0,0 +1,173 @@ +@section('title') {{'Enter new seed box'}} @endsection + + + {{ __('Insert a new seed box') }} + +
    +
    +
    +

    Seed box information

    + + + Go back + +
    + @csrf +
    +
    +
    +
    Title
    + + @error('title') {{ $message }} + @enderror +
    +
    +
    +
    +
    Hostname
    + +
    +
    +
    +
    +
    Type
    + +
    +
    +
    +
    +
    + + 10 + +
    +
    + + Price + price + 2.50 + 9999 + 0.01 + + +
    +
    + +
    +
    + + {{Session::get('default_currency')}} + +
    +
    +
    +
    + + 1 + +
    +
    + + Was promo + was_promo + 0 + +
    +
    + + Owned since + owned_since + {{Carbon\Carbon::now()->format('Y-m-d') }} + +
    +
    + + Next due date + next_due_date + {{Carbon\Carbon::now()->addDays(30)->format('Y-m-d') }} + +
    +
    +
    +
    + + Disk GB + disk + 1 + 999999 + 1 + 500 + +
    +
    + + Bandwidth GB + bandwidth + 1 + 999999 + 1 + 1000 + +
    +
    + + Port speed Mbps + port_speed + 1 + 999999 + 1 + 1000 + +
    +
    +
    +
    + + label + label1 + +
    +
    + + label + label2 + +
    +
    + + label + label3 + +
    +
    + + label + label4 + +
    +
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/resources/views/seedboxes/edit.blade.php b/resources/views/seedboxes/edit.blade.php new file mode 100644 index 0000000..e846120 --- /dev/null +++ b/resources/views/seedboxes/edit.blade.php @@ -0,0 +1,219 @@ +@section('title') {{$seedbox[0]->title}} {{'edit'}} @endsection + + + Edit {{ $seedbox[0]->title }} + +
    +
    +
    + + Back to seed boxes + + +
    + @csrf + @method('PUT') +
    +
    +
    +
    Title
    + + @error('title') {{ $message }} + @enderror +
    +
    +
    +
    +
    Hostname
    + +
    +
    +
    + +
    +
    Type
    + +
    +
    +
    +
    +
    + + {{$seedbox[0]->provider_id}} + +
    +
    + + Price + price + {{$seedbox[0]->price}} + 9999 + 0.01 + + +
    +
    + + {{$seedbox[0]->term}} + +
    +
    + + {{$seedbox[0]->currency}} + +
    +
    +
    +
    + + {{$seedbox[0]->location_id}} + +
    +
    + + Promo price + was_promo + {{ $seedbox[0]->was_promo }} + +
    +
    + + Owned since + owned_since + {{$seedbox[0]->owned_since }} + +
    +
    + + Next due date + next_due_date + {{$seedbox[0]->next_due_date }} + +
    +
    +
    +
    + + Disk GB + disk + 1 + 999999 + 1 + {{$seedbox[0]->disk_as_gb}} + +
    +
    + + Bandwidth GB + bandwidth + 1 + 999999 + 1 + {{$seedbox[0]->bandwidth}} + +
    +
    + + Port speed GB + port_speed + 1 + 999999 + 1 + {{$seedbox[0]->port_speed}} + +
    +
    +
    +
    + + label + label1 + @if(isset($labels[0]->id)) + {{$labels[0]->id}} + @endif + +
    +
    + + label + label2 + @if(isset($labels[1]->id)) + {{$labels[1]->id}} + @endif + +
    +
    + + label + label3 + @if(isset($labels[2]->id)) + {{$labels[2]->id}} + @endif + +
    +
    + + label + label4 + @if(isset($labels[3]->id)) + {{$labels[3]->id}} + @endif + +
    +
    +
    + active === 1) ? 'checked' : '' }}> + +
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/resources/views/seedboxes/index.blade.php b/resources/views/seedboxes/index.blade.php new file mode 100644 index 0000000..4e07d1b --- /dev/null +++ b/resources/views/seedboxes/index.blade.php @@ -0,0 +1,124 @@ +@section('title') {{'Seed boxes'}} @endsection +@section('style') + +@endsection +@section('scripts') + + +@endsection + + + {{ __('Seed boxes') }} + +
    + +
    +
    + Add a seed box + @if ($message = Session::get('success')) + + @endif +
    + + + + + + + + + + + + + + + + + + @if(isset($seedboxes[0])) + @foreach($seedboxes as $row) + + + + + + + + + + + + + + @endforeach + @else + + + + @endif + +
    TitleTypeLocationProviderDiskBWidthPortPriceDueHad sinceActions
    {{ $row->title }}{{ $row->seed_box_type }}{{ $row->location }}{{ $row->provider_name }} + @if($row->disk_as_gb >= 1000) + {{ number_format($row->disk_as_gb / 1000,1) }} TB + @else + {{ $row->disk_as_gb }} GB + @endif + + @if($row->bandwidth >= 1000) + {{ number_format($row->bandwidth / 1000,1) }} TB + @else + {{ $row->bandwidth }} GB + @endif + + @if($row->port_speed >= 1000) + {{ number_format($row->port_speed / 1000,1) }} Gbps + @else + {{ $row->port_speed }} Mbps + @endif + {{ $row->price }} {{$row->currency}} {{\App\Process::paymentTermIntToString($row->term)}}{{Carbon\Carbon::parse($row->next_due_date)->diffForHumans()}}{{ $row->owned_since }} +
    + @csrf + + + + + + + +
    +
    No seed boxes found.
    +
    +
    +
    + @if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) +

    Built on Laravel + v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})

    + @endif +
    + + +
    diff --git a/resources/views/seedboxes/show.blade.php b/resources/views/seedboxes/show.blade.php new file mode 100644 index 0000000..b52f480 --- /dev/null +++ b/resources/views/seedboxes/show.blade.php @@ -0,0 +1,145 @@ +@section('title') {{$seedbox->title}} {{'Seed box'}} @endsection + + + {{ __('Seed box details') }} + +
    + +
    +
    +

    {{ $seedbox->title }}

    + @foreach($labels as $label) + @if($loop->last) + {{$label->label}} + @else + {{$label->label}}, + @endif + @endforeach +
    +
    +
    {{ $seedbox->id }}
    + @if($seedbox->active !== 1) +
    not active
    + @endif +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Type{{ $seedbox->seed_box_type }}
    Hostname{{ $seedbox_extras[0]->hostname }}
    Location{{ $seedbox_extras[0]->location }}
    Provider{{ $seedbox_extras[0]->provider_name }}
    Price{{ $seedbox_extras[0]->price }} {{ $seedbox_extras[0]->currency }} + {{\App\Process::paymentTermIntToString($seedbox_extras[0]->term)}} +
    Was promo{{ ($seedbox_extras[0]->was_promo === 1) ? 'Yes' : 'No' }}
    Owned since + @if(!is_null($seedbox->owned_since)) + {{ date_format(new DateTime($seedbox->owned_since), 'jS F Y') }} + @endif +
    Next due date{{Carbon\Carbon::parse($seedbox_extras[0]->next_due_date)->diffForHumans()}} + ({{Carbon\Carbon::parse($seedbox_extras[0]->next_due_date)->format('d/m/Y')}}) +
    Inserted + @if(!is_null($seedbox->created_at)) + {{ date_format(new DateTime($seedbox->created_at), 'jS M y g:i a') }} + @endif +
    Updated + @if(!is_null($seedbox->updated_at)) + {{ date_format(new DateTime($seedbox->updated_at), 'jS M y g:i a') }} + @endif +
    +
    +
    +
    + + + + + + + + + + + + + + + +
    Disk + @if($seedbox->disk_as_gb >= 1000) + {{ number_format($seedbox->disk_as_gb / 1000,1) }} TB + @else + {{ $seedbox->disk_as_gb }} GB + @endif +
    Bandwidth + @if($seedbox->bandwidth >= 1000) + {{ number_format($seedbox->bandwidth / 1000,1) }} TB + @else + {{ $seedbox->bandwidth }} GB + @endif +
    Port speed + @if($seedbox->port_speed >= 1000) + {{ number_format($seedbox->port_speed / 1000,1) }} Gbps + @else + {{ $seedbox->port_speed }} Mbps + @endif +
    + +
    +
    + + Go back + + + Edit + +
    + @if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) +

    + Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }} + ) +

    + @endif +
    +
    diff --git a/resources/views/servers/create.blade.php b/resources/views/servers/create.blade.php index 0a1b495..a078c85 100644 --- a/resources/views/servers/create.blade.php +++ b/resources/views/servers/create.blade.php @@ -93,6 +93,7 @@ +
    diff --git a/resources/views/servers/edit.blade.php b/resources/views/servers/edit.blade.php index ca1abd5..4e4087f 100644 --- a/resources/views/servers/edit.blade.php +++ b/resources/views/servers/edit.blade.php @@ -78,6 +78,9 @@ +
    diff --git a/resources/views/settings/index.blade.php b/resources/views/settings/index.blade.php index ebfa76b..5ca3e47 100644 --- a/resources/views/settings/index.blade.php +++ b/resources/views/settings/index.blade.php @@ -17,6 +17,22 @@
    @csrf @method('PUT') +
    +
    +
    +
    Use dark mode
    + +
    +
    +
    diff --git a/routes/api.php b/routes/api.php index cfbad94..71f4515 100644 --- a/routes/api.php +++ b/routes/api.php @@ -55,6 +55,9 @@ Route::middleware('auth:api')->get('providers/{id}', 'App\Http\Controllers\ApiCo Route::middleware('auth:api')->get('reseller/', 'App\Http\Controllers\ApiController@getAllReseller'); Route::middleware('auth:api')->get('reseller/{id}', 'App\Http\Controllers\ApiController@getReseller'); +Route::middleware('auth:api')->get('seedbox/', 'App\Http\Controllers\ApiController@getAllSeedbox'); +Route::middleware('auth:api')->get('seedbox/{id}', 'App\Http\Controllers\ApiController@getSeedbox'); + Route::middleware('auth:api')->get('settings/', 'App\Http\Controllers\ApiController@getAllSettings'); Route::middleware('auth:api')->get('shared/', 'App\Http\Controllers\ApiController@getAllShared'); diff --git a/routes/web.php b/routes/web.php index 1e0522d..db71eaa 100644 --- a/routes/web.php +++ b/routes/web.php @@ -10,6 +10,7 @@ use App\Http\Controllers\MiscController; use App\Http\Controllers\OsController; use App\Http\Controllers\ProvidersController; use App\Http\Controllers\ResellerController; +use App\Http\Controllers\SeedBoxesController; use App\Http\Controllers\ServerController; use App\Http\Controllers\SettingsController; use App\Http\Controllers\SharedController; @@ -63,6 +64,8 @@ Route::resource('servers', ServerController::class)->middleware(['auth']); Route::resource('settings', SettingsController::class)->middleware(['auth']); +Route::resource('seedboxes', SeedBoxesController::class)->middleware(['auth']); + Route::resource('shared', SharedController::class)->middleware(['auth']); Route::resource('yabs', YabsController::class)->middleware(['auth']);