From ecc9a610690275251f8fa22a13f8e4b7b0b6ae99 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 9 May 2022 14:35:07 +1000 Subject: [PATCH 01/43] Cleaned up IPs & Label assignments Cleaned up IPs & Label assignments when creating, updating and deleting --- app/Http/Controllers/DomainsController.php | 58 +++++-------- app/Http/Controllers/MiscController.php | 12 +-- app/Http/Controllers/ResellerController.php | 75 ++++++---------- app/Http/Controllers/ServerController.php | 94 +++++++-------------- app/Http/Controllers/SharedController.php | 79 +++++++---------- app/Models/IPs.php | 14 +++ app/Models/Labels.php | 11 ++- 7 files changed, 138 insertions(+), 205 deletions(-) diff --git a/app/Http/Controllers/DomainsController.php b/app/Http/Controllers/DomainsController.php index b2af35e..5b7aa03 100644 --- a/app/Http/Controllers/DomainsController.php +++ b/app/Http/Controllers/DomainsController.php @@ -59,17 +59,6 @@ class DomainsController extends Controller $domain_id = Str::random(8); - Domains::create([ - 'id' => $domain_id, - 'domain' => $request->domain, - 'extension' => $request->extension, - 'ns1' => $request->ns1, - 'ns2' => $request->ns2, - 'ns3' => $request->ns3, - 'provider_id' => $request->provider_id, - 'owned_since' => $request->owned_since - ]); - $pricing = new Pricing(); $as_usd = $pricing->convertToUSD($request->price, $request->currency); @@ -85,13 +74,18 @@ class DomainsController extends Controller 'next_due_date' => $request->next_due_date, ]); - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + Domains::create([ + 'id' => $domain_id, + 'domain' => $request->domain, + 'extension' => $request->extension, + 'ns1' => $request->ns1, + 'ns2' => $request->ns2, + 'ns3' => $request->ns3, + 'provider_id' => $request->provider_id, + 'owned_since' => $request->owned_since + ]); - 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]); - } - } + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $domain_id); Cache::forget('services_count');//Main page services_count cache Cache::forget('due_soon');//Main page due_soon cache @@ -125,17 +119,6 @@ class DomainsController extends Controller 'price' => 'numeric' ]); - $domain->update([ - 'domain' => $request->domain, - 'extension' => $request->extension, - 'ns1' => $request->ns1, - 'ns2' => $request->ns2, - 'ns3' => $request->ns3, - 'provider_id' => $request->provider_id, - 'owned_since' => $request->owned_since, - 'active' => (isset($request->is_active)) ? 1 : 0 - ]); - $pricing = new Pricing(); $as_usd = $pricing->convertToUSD($request->price, $request->currency); @@ -153,15 +136,20 @@ class DomainsController extends Controller 'active' => (isset($request->is_active)) ? 1 : 0 ]); - $deleted = DB::table('labels_assigned')->where('service_id', '=', $domain->id)->delete(); + $domain->update([ + 'domain' => $request->domain, + 'extension' => $request->extension, + 'ns1' => $request->ns1, + 'ns2' => $request->ns2, + 'ns3' => $request->ns3, + 'provider_id' => $request->provider_id, + 'owned_since' => $request->owned_since, + 'active' => (isset($request->is_active)) ? 1 : 0 + ]); - $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + Labels::deleteLabelsAssignedTo($domain->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)], $domain->id]); - } - } + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $domain->id); Cache::forget('services_count');//Main page services_count cache Cache::forget('due_soon');//Main page due_soon cache diff --git a/app/Http/Controllers/MiscController.php b/app/Http/Controllers/MiscController.php index a6d899e..a57a4a6 100644 --- a/app/Http/Controllers/MiscController.php +++ b/app/Http/Controllers/MiscController.php @@ -46,12 +46,6 @@ class MiscController extends Controller $ms_id = Str::random(8); - Misc::create([ - 'id' => $ms_id, - 'name' => $request->name, - 'owned_since' => $request->owned_since - ]); - $pricing = new Pricing(); $as_usd = $pricing->convertToUSD($request->price, $request->currency); @@ -67,6 +61,12 @@ class MiscController extends Controller 'next_due_date' => $request->next_due_date, ]); + Misc::create([ + 'id' => $ms_id, + 'name' => $request->name, + 'owned_since' => $request->owned_since + ]); + 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 diff --git a/app/Http/Controllers/ResellerController.php b/app/Http/Controllers/ResellerController.php index 43ac8d1..863705e 100644 --- a/app/Http/Controllers/ResellerController.php +++ b/app/Http/Controllers/ResellerController.php @@ -62,6 +62,27 @@ class ResellerController extends Controller $reseller_id = Str::random(8); + $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::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,41 +103,6 @@ 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 @@ -228,25 +214,14 @@ class ResellerController extends Controller 'next_due_date' => $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 diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 598900c..9a274e8 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -109,6 +109,29 @@ class ServerController extends Controller $server_id = Str::random(8); + $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, + ]); + + 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,52 +155,7 @@ 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 - ] - ); - } - - 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]); - } - } + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $server_id); Cache::forget('services_count');//Main page services_count cache Cache::forget('due_soon');//Main page due_soon cache @@ -256,9 +234,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, @@ -287,7 +266,7 @@ class ServerController extends Controller $as_usd = $pricing->convertToUSD($request->price, $request->currency); DB::table('pricings') - ->where('service_id', $request->server_id) + ->where('service_id', $server_id) ->update([ 'service_type' => 1, 'currency' => $request->currency, @@ -299,27 +278,16 @@ class ServerController extends Controller 'active' => (isset($request->is_active)) ? 1 : 0 ]); - $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); } } diff --git a/app/Http/Controllers/SharedController.php b/app/Http/Controllers/SharedController.php index 63cdfb7..a9c1360 100644 --- a/app/Http/Controllers/SharedController.php +++ b/app/Http/Controllers/SharedController.php @@ -60,6 +60,31 @@ class SharedController extends Controller $shared_id = Str::random(8); + $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::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,41 +104,6 @@ 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 @@ -223,25 +213,14 @@ class SharedController extends Controller 'next_due_date' => $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 diff --git a/app/Models/IPs.php b/app/Models/IPs.php index 8ebb264..49f8f95 100644 --- a/app/Models/IPs.php +++ b/app/Models/IPs.php @@ -5,6 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; class IPs extends Model { @@ -21,4 +22,17 @@ 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 + ] + ); + } + } diff --git a/app/Models/Labels.php b/app/Models/Labels.php index 68623b7..5f97cc9 100644 --- a/app/Models/Labels.php +++ b/app/Models/Labels.php @@ -23,5 +23,14 @@ 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]); + } + } + } + } From 06a3d712222fb0e67d25d003309ea2b73a66f884 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 9 May 2022 14:42:09 +1000 Subject: [PATCH 02/43] Added foreign keys Added foreign keys to some tables --- ...2021_02_10_122904_create_servers_table.php | 6 +- ...2022_02_01_233932_create_domains_table.php | 2 +- ...2022_02_03_040140_create_shareds_table.php | 4 +- ...22_02_03_040152_create_resellers_table.php | 4 +- .../2022_05_09_114227_add_foreign_keys.php | 55 +++++++++++++++++++ 5 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 database/migrations/2022_05_09_114227_add_foreign_keys.php 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..4135b27 --- /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() + { + } +} From 6da3af1364069bb950adeee9b9e5e598e10210de Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 9 May 2022 14:57:38 +1000 Subject: [PATCH 03/43] Fixed OS cache Fixed OS cache --- app/Http/Controllers/ApiController.php | 2 +- app/Http/Controllers/OsController.php | 6 +++--- app/Http/Controllers/ServerController.php | 2 +- app/Models/OS.php | 9 +++++++++ app/View/Components/OsSelect.php | 5 +---- resources/views/components/os-select.blade.php | 4 ++-- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index 9c82e6f..89b64dd 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -230,7 +230,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/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/ServerController.php b/app/Http/Controllers/ServerController.php index 9a274e8..eb9a1ab 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -83,7 +83,7 @@ class ServerController extends Controller { $Providers = Providers::all(); $Locations = Locations::all(); - $Os = OS::all(); + $Os = OS::allOS(); return view('servers.create', compact(['Providers', 'Locations', 'Os'])); } 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/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/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'}}
From d3125170e609d8515cbd12ca676032613315cb48 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 9 May 2022 15:00:33 +1000 Subject: [PATCH 04/43] Fixed locations cache Fixed locations cache --- app/Http/Controllers/LocationsController.php | 4 ++-- app/Models/Locations.php | 9 +++++++++ app/View/Components/LocationsSelect.php | 4 +--- resources/views/components/locations-select.blade.php | 5 +++-- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/LocationsController.php b/app/Http/Controllers/LocationsController.php index d160966..e6f0e96 100644 --- a/app/Http/Controllers/LocationsController.php +++ b/app/Http/Controllers/LocationsController.php @@ -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/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/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/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'}}
From 1251fae0dfb759717bc7d55efcc548b0043f0a2e Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 9 May 2022 15:39:03 +1000 Subject: [PATCH 05/43] Fixed providers cache Fixed providers cache --- app/Http/Controllers/DomainsController.php | 2 +- app/Http/Controllers/ProvidersController.php | 6 +++--- app/Http/Controllers/ResellerController.php | 2 +- app/Http/Controllers/ServerController.php | 2 +- app/Http/Controllers/SharedController.php | 2 +- app/Models/Providers.php | 9 +++++++++ app/View/Components/ProvidersSelect.php | 4 +--- resources/views/components/providers-select.blade.php | 4 ++-- 8 files changed, 19 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/DomainsController.php b/app/Http/Controllers/DomainsController.php index 5b7aa03..ff8c364 100644 --- a/app/Http/Controllers/DomainsController.php +++ b/app/Http/Controllers/DomainsController.php @@ -43,7 +43,7 @@ class DomainsController extends Controller public function create() { - $Providers = Providers::all(); + $Providers = Providers::allProviders(); return view('domains.create', compact('Providers')); } diff --git a/app/Http/Controllers/ProvidersController.php b/app/Http/Controllers/ProvidersController.php index 7002c78..2da272a 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.'); @@ -65,7 +65,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 863705e..08181c7 100644 --- a/app/Http/Controllers/ResellerController.php +++ b/app/Http/Controllers/ResellerController.php @@ -28,7 +28,7 @@ class ResellerController extends Controller public function create() { - $Providers = Providers::all(); + $Providers = Providers::allProviders(); $Locations = Locations::all(); return view('reseller.create', compact(['Providers', 'Locations'])); } diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index eb9a1ab..35677d2 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -81,7 +81,7 @@ class ServerController extends Controller public function create() { - $Providers = Providers::all(); + $Providers = Providers::allProviders(); $Locations = Locations::all(); $Os = OS::allOS(); return view('servers.create', compact(['Providers', 'Locations', 'Os'])); diff --git a/app/Http/Controllers/SharedController.php b/app/Http/Controllers/SharedController.php index a9c1360..6131e9d 100644 --- a/app/Http/Controllers/SharedController.php +++ b/app/Http/Controllers/SharedController.php @@ -28,7 +28,7 @@ class SharedController extends Controller public function create() { - $Providers = Providers::all(); + $Providers = Providers::allProviders(); $Locations = Locations::all(); return view('shared.create', compact(['Providers', 'Locations'])); } diff --git a/app/Models/Providers.php b/app/Models/Providers.php index 8a70ebd..cee3581 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,11 @@ 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(); + }); + } } 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/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'}}
From 7b37eba5173ba72841e0961723ea5344965f7001 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 9 May 2022 15:39:29 +1000 Subject: [PATCH 06/43] Update all locations call type Update all locations call type --- app/Http/Controllers/LocationsController.php | 2 +- app/Http/Controllers/ResellerController.php | 2 +- app/Http/Controllers/ServerController.php | 2 +- app/Http/Controllers/SharedController.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/LocationsController.php b/app/Http/Controllers/LocationsController.php index e6f0e96..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'])); } diff --git a/app/Http/Controllers/ResellerController.php b/app/Http/Controllers/ResellerController.php index 08181c7..60f1b9a 100644 --- a/app/Http/Controllers/ResellerController.php +++ b/app/Http/Controllers/ResellerController.php @@ -29,7 +29,7 @@ class ResellerController extends Controller public function create() { $Providers = Providers::allProviders(); - $Locations = Locations::all(); + $Locations = Locations::allLocations(); return view('reseller.create', compact(['Providers', 'Locations'])); } diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 35677d2..a57d7db 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -82,7 +82,7 @@ class ServerController extends Controller public function create() { $Providers = Providers::allProviders(); - $Locations = Locations::all(); + $Locations = Locations::allLocations(); $Os = OS::allOS(); return view('servers.create', compact(['Providers', 'Locations', 'Os'])); } diff --git a/app/Http/Controllers/SharedController.php b/app/Http/Controllers/SharedController.php index 6131e9d..4cdb060 100644 --- a/app/Http/Controllers/SharedController.php +++ b/app/Http/Controllers/SharedController.php @@ -29,7 +29,7 @@ class SharedController extends Controller public function create() { $Providers = Providers::allProviders(); - $Locations = Locations::all(); + $Locations = Locations::allLocations(); return view('shared.create', compact(['Providers', 'Locations'])); } From 31f1faf8ee8416da6e75c0cbd309a25752462745 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 9 May 2022 15:57:02 +1000 Subject: [PATCH 07/43] Added a dark mode theme Added a dark mode theme with settings option --- app/Http/Controllers/HomeController.php | 1 + app/Http/Controllers/SettingsController.php | 3 +++ ...022_05_09_154509_add_dark_mode_setting.php | 19 ++++++++++++++++++ public/css/bootstrap-dark.min.css | Bin 0 -> 163134 bytes resources/views/layouts/app.blade.php | 7 ++++++- resources/views/settings/index.blade.php | 16 +++++++++++++++ 6 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 database/migrations/2022_05_09_154509_add_dark_mode_setting.php create mode 100644 public/css/bootstrap-dark.min.css diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index fc1de27..6b2ad4d 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -105,6 +105,7 @@ class HomeController extends Controller ->get(); }); + 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); diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index dfae00f..8f72bbb 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,6 +54,7 @@ class SettingsController extends Controller 'recently_added_amount' => $request->recently_added_amount ]); + Session::put('dark_mode', $request->dark_mode ?? 1); 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); 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/public/css/bootstrap-dark.min.css b/public/css/bootstrap-dark.min.css new file mode 100644 index 0000000000000000000000000000000000000000..86f36bc8d7f6a98c05ff961decfe3ff85078fdb8 GIT binary patch literal 163134 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ůvXh9eGsdq;5fC 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'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/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
+ +
+
+
From 5ed5dc91a91adb912ce4dbcfda86d9fb3f8ec920 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 9 May 2022 16:03:17 +1000 Subject: [PATCH 08/43] Updated server create view data Updated server create view data --- app/Http/Controllers/ServerController.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index a57d7db..4bcfe2e 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -81,10 +81,7 @@ class ServerController extends Controller public function create() { - $Providers = Providers::allProviders(); - $Locations = Locations::allLocations(); - $Os = OS::allOS(); - return view('servers.create', compact(['Providers', 'Locations', 'Os'])); + return view('servers.create'); } public function store(Request $request) From 571c1c2d28c9829395f8af5471dd20f778a879c7 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 14 May 2022 23:36:16 +1000 Subject: [PATCH 09/43] Removed server edit passed in data Removed server edit passed in data --- app/Http/Controllers/ServerController.php | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 4bcfe2e..11aacb7 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -195,15 +195,6 @@ class ServerController extends Controller 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']); - - $os = DB::table('os')->get(['*']); - $ip_addresses = json_decode(DB::table('ips as i') ->where('i.service_id', '=', $server->id) ->get(), true); @@ -213,7 +204,7 @@ class ServerController extends Controller ->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) From da34256194be3470c1e0593040dc570e34f3a1d0 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 14 May 2022 23:39:31 +1000 Subject: [PATCH 10/43] Added VMware for server virt type Added VMware for server virt type --- app/Models/Server.php | 2 ++ resources/views/servers/create.blade.php | 1 + resources/views/servers/edit.blade.php | 3 +++ 3 files changed, 6 insertions(+) diff --git a/app/Models/Server.php b/app/Models/Server.php index b8ffe8b..d1bc822 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -27,6 +27,8 @@ class Server extends Model return "DEDI"; } elseif ($type === 4) { return "LXC"; + } elseif ($type === 6) { + return "VMware"; } else { return "SEMI-DEDI"; } 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 @@ +
From 3ff6cfe56e6f67ecee190b5e37ff6a58554e289e Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 14 May 2022 23:52:47 +1000 Subject: [PATCH 11/43] Minor styling changes in dark theme Minor styling changes in dark theme --- public/css/bootstrap-dark.min.css | Bin 163134 -> 163134 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/css/bootstrap-dark.min.css b/public/css/bootstrap-dark.min.css index 86f36bc8d7f6a98c05ff961decfe3ff85078fdb8..2a68b730c4d16e75c0be2ffec84a3086a0972add 100644 GIT binary patch delta 112 zcmdn@i*w&E&J9g`tQM9gDF%}TpGb=)T4m&yr505u=jY@XSt*-Xn3-A_ZQjn;%E)Gs zW^S2gzS&9Ojw`!qG6-5vX7m^3v{Fv81VIo_cydAj`{dZLNo+|LAlUphto>^k Date: Sun, 15 May 2022 00:15:20 +1000 Subject: [PATCH 12/43] Updated label and DNS count to use cache Updated label and DNS count to use cache --- app/Http/Controllers/DNSController.php | 7 ++++++- app/Http/Controllers/LabelsController.php | 3 +++ app/Models/DNS.php | 9 +++++++++ app/Models/Labels.php | 8 ++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/DNSController.php b/app/Http/Controllers/DNSController.php index 56b52a2..dcc7715 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; @@ -59,6 +60,8 @@ class DNSController extends Controller } } + Cache::forget('dns_count'); + return redirect()->route('dns.index') ->with('success', 'DNS Created Successfully.'); } @@ -87,7 +90,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) @@ -130,6 +133,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/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/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/Labels.php b/app/Models/Labels.php index 5f97cc9..cbb376a 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 @@ -33,4 +34,11 @@ class Labels extends Model } } + public static function labelsCount() + { + return Cache::remember('labels_count', now()->addMonth(1), function () { + return DB::table('labels')->count(); + }); + } + } From 3948dd50dbb60f9fbb3cf5e9154d6e057f2e88c8 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 00:15:45 +1000 Subject: [PATCH 13/43] Updated home layout most tally cards to be col-6 Updated home layout most tally cards to be col-6 --- resources/views/home.blade.php | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 2ae96e4..0edb354 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 @@
-
+
From 9204a05654904ee4cd320cd94f20bf5ffce87fc1 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 00:24:05 +1000 Subject: [PATCH 14/43] Added insertPricing & allPricing function Added insertPricing & allPricing function --- app/Http/Controllers/DomainsController.php | 11 +-------- app/Http/Controllers/ResellerController.php | 11 +-------- app/Http/Controllers/ServerController.php | 13 ++--------- app/Http/Controllers/SharedController.php | 11 +-------- app/Models/Pricing.php | 25 +++++++++++++++++++++ 5 files changed, 30 insertions(+), 41 deletions(-) diff --git a/app/Http/Controllers/DomainsController.php b/app/Http/Controllers/DomainsController.php index ff8c364..3823f7e 100644 --- a/app/Http/Controllers/DomainsController.php +++ b/app/Http/Controllers/DomainsController.php @@ -63,16 +63,7 @@ class DomainsController extends Controller $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, - ]); + $pricing->insertPricing(4, $domain_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); Domains::create([ 'id' => $domain_id, diff --git a/app/Http/Controllers/ResellerController.php b/app/Http/Controllers/ResellerController.php index 60f1b9a..190cf08 100644 --- a/app/Http/Controllers/ResellerController.php +++ b/app/Http/Controllers/ResellerController.php @@ -66,16 +66,7 @@ class ResellerController extends Controller $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, - ]); + $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); diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 11aacb7..20deb31 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -110,16 +110,7 @@ class ServerController extends Controller $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, - ]); + $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); @@ -204,7 +195,7 @@ class ServerController extends Controller ->where('s.id', '=', $server->id) ->get(['s.*', 'p.*']); - return view('servers.edit', compact(['server','ip_addresses'])); + return view('servers.edit', compact(['server', 'ip_addresses'])); } public function update(Request $request, Server $server) diff --git a/app/Http/Controllers/SharedController.php b/app/Http/Controllers/SharedController.php index 4cdb060..92c82e2 100644 --- a/app/Http/Controllers/SharedController.php +++ b/app/Http/Controllers/SharedController.php @@ -64,16 +64,7 @@ class SharedController extends Controller $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, - ]); + $pricing->insertPricing(2, $shared_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); Labels::deleteLabelsAssignedTo($shared_id); diff --git a/app/Models/Pricing.php b/app/Models/Pricing.php index 15efbdb..d089654 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,27 @@ class Pricing extends Model { DB::table('pricings')->where('service_id', '=', $id)->delete(); } + + public function insertPricing(int $type, string $server_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' => $server_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 static function allPricing() + { + return Cache::remember('all_pricing', now()->addWeek(1), function () { + return DB::table('pricings') + ->get(); + }); + } } From 18c73aca9556bd87353d5b6920ef92c317fbd6a2 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 00:43:36 +1000 Subject: [PATCH 15/43] Added and applied updatePricing function Added and applied updatePricing function --- app/Http/Controllers/DomainsController.php | 13 +----------- app/Http/Controllers/MiscController.php | 23 ++------------------- app/Http/Controllers/ResellerController.php | 11 +--------- app/Http/Controllers/ServerController.php | 13 +----------- app/Http/Controllers/SharedController.php | 11 +--------- app/Models/Pricing.php | 19 +++++++++++++++-- 6 files changed, 23 insertions(+), 67 deletions(-) diff --git a/app/Http/Controllers/DomainsController.php b/app/Http/Controllers/DomainsController.php index 3823f7e..976d54f 100644 --- a/app/Http/Controllers/DomainsController.php +++ b/app/Http/Controllers/DomainsController.php @@ -114,18 +114,7 @@ class DomainsController extends Controller $as_usd = $pricing->convertToUSD($request->price, $request->currency); - 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 - ]); + $pricing->updatePricing($domain->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); $domain->update([ 'domain' => $request->domain, diff --git a/app/Http/Controllers/MiscController.php b/app/Http/Controllers/MiscController.php index a57a4a6..f52f06c 100644 --- a/app/Http/Controllers/MiscController.php +++ b/app/Http/Controllers/MiscController.php @@ -50,16 +50,7 @@ class MiscController extends Controller $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, - ]); + $pricing->insertPricing(5, $ms_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date); Misc::create([ 'id' => $ms_id, @@ -104,17 +95,7 @@ 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 diff --git a/app/Http/Controllers/ResellerController.php b/app/Http/Controllers/ResellerController.php index 190cf08..1faea48 100644 --- a/app/Http/Controllers/ResellerController.php +++ b/app/Http/Controllers/ResellerController.php @@ -194,16 +194,7 @@ 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); Labels::deleteLabelsAssignedTo($request->id); diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 20deb31..9bfa2cc 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -244,18 +244,7 @@ class ServerController extends Controller $as_usd = $pricing->convertToUSD($request->price, $request->currency); - DB::table('pricings') - ->where('service_id', $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); Labels::deleteLabelsAssignedTo($server_id); diff --git a/app/Http/Controllers/SharedController.php b/app/Http/Controllers/SharedController.php index 92c82e2..2f9dd78 100644 --- a/app/Http/Controllers/SharedController.php +++ b/app/Http/Controllers/SharedController.php @@ -193,16 +193,7 @@ 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); Labels::deleteLabelsAssignedTo($request->id); diff --git a/app/Models/Pricing.php b/app/Models/Pricing.php index d089654..3f56ed9 100644 --- a/app/Models/Pricing.php +++ b/app/Models/Pricing.php @@ -78,11 +78,11 @@ class Pricing extends Model DB::table('pricings')->where('service_id', '=', $id)->delete(); } - public function insertPricing(int $type, string $server_id, string $currency, float $price, int $term, float $as_usd, string $next_due_date, int $is_active = 1) + 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' => $server_id, + 'service_id' => $service_id, 'currency' => $currency, 'price' => $price, 'term' => $term, @@ -93,6 +93,21 @@ class Pricing extends Model ]); } + public function updatePricing(string $service_id, string $currency, float $price, int $term, float $as_usd, string $next_due_date, int $is_active = 1) + { + 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 () { From ed0d76df255bbd3049fd58c0310c5e7cb8057f4b Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 00:45:33 +1000 Subject: [PATCH 16/43] Updated servers index cache time to 1 month Updated servers index cache time to 1 month --- app/Http/Controllers/ServerController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 9bfa2cc..c05ce5f 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -23,7 +23,7 @@ class ServerController extends Controller public function index() { - $servers = Cache::remember('all_active_servers', 1440, function () { + $servers = 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') @@ -33,7 +33,7 @@ class ServerController extends Controller ->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']); }); - $non_active_servers = Cache::remember('non_active_servers', 1440, function () { + $non_active_servers = 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') From 2f3eaadb2565a4e9d0ea87e0f9b68f92bd9fa3b7 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 01:21:51 +1000 Subject: [PATCH 17/43] Cleaned up server controller Moved DB calls into models & cached them --- app/Http/Controllers/ServerController.php | 120 ++++------------------ app/Models/IPs.php | 10 ++ app/Models/Labels.php | 10 ++ app/Models/Pricing.php | 10 ++ app/Models/Server.php | 94 ++++++++++++++++- app/Models/Settings.php | 8 ++ app/Models/Yabs.php | 21 ++++ 7 files changed, 172 insertions(+), 101 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index c05ce5f..ef86f74 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -9,6 +9,8 @@ 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; @@ -23,34 +25,16 @@ class ServerController extends Controller public function index() { - $servers = 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']); - }); + $servers = Server::activeServersDataIndexPage(); - $non_active_servers = 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']); - }); + $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 +47,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); @@ -145,12 +119,7 @@ class ServerController extends Controller Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $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.'); @@ -158,42 +127,22 @@ 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) { - $ip_addresses = json_decode(DB::table('ips as i') - ->where('i.service_id', '=', $server->id) - ->get(), true); + $ip_addresses = IPs::ipsForServer($server->id); - $server = DB::table('servers as s') - ->join('pricings as p', 's.id', '=', 'p.service_id') - ->where('s.id', '=', $server->id) - ->get(['s.*', 'p.*']); + $server = Pricing::pricingForService($server->id); return view('servers.edit', compact(['server', 'ip_addresses'])); } @@ -259,12 +208,8 @@ class ServerController extends Controller } } - 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.'); @@ -283,12 +228,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.'); @@ -302,40 +242,20 @@ 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(); - - $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.*']); + $server1_network = Yabs::serverCompareNetwork($server1_data[0]->yabs_id); + $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/Models/IPs.php b/app/Models/IPs.php index 49f8f95..66e7053 100644 --- a/app/Models/IPs.php +++ b/app/Models/IPs.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; use Illuminate\Support\Str; @@ -35,4 +36,13 @@ class IPs extends Model ); } + 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 cbb376a..945a682 100644 --- a/app/Models/Labels.php +++ b/app/Models/Labels.php @@ -41,4 +41,14 @@ class Labels extends Model }); } + public static function labelsForService(string $service_id) + { + return Cache::remember("labels_for_service.$service_id", now()->addMinute(1), 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.label']); + }); + } + } diff --git a/app/Models/Pricing.php b/app/Models/Pricing.php index 3f56ed9..e021362 100644 --- a/app/Models/Pricing.php +++ b/app/Models/Pricing.php @@ -115,4 +115,14 @@ class Pricing extends Model ->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/Server.php b/app/Models/Server.php index d1bc822..a28a9e2 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 */ @@ -152,4 +154,94 @@ 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 + } + + 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..e485fc2 100644 --- a/app/Models/Settings.php +++ b/app/Models/Settings.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 Settings extends Model { @@ -12,4 +13,11 @@ class Settings extends Model protected $table = 'settings'; protected $fillable = ['id', 'show_versions_footer', 'show_servers_public']; + + public static function getSettings() + { + return DB::table('settings') + ->where('id', '=', 1) + ->get(); + } } 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(); + }); + } + } From e33559fddc90caae7842680e2d03eccbae55a72b Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 01:22:47 +1000 Subject: [PATCH 18/43] Updated pricing, labels and dns calls to be cached Updated pricing, labels and dns calls to be cached --- app/Http/Controllers/HomeController.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 6b2ad4d..5a98977 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Models\DNS; +use App\Models\Labels; use App\Models\Pricing; use Carbon\Carbon; use Illuminate\Http\Request; @@ -120,7 +122,9 @@ class HomeController extends Controller Session::put('recently_added_amount', $settings[0]->recently_added_amount ?? 6); Session::save(); - $pricing = json_decode(DB::table('pricings')->get(), true); + $all_pricing = Pricing::allPricing(); + + $pricing = json_decode($all_pricing, true); $total_cost_weekly = $total_cost_pm = $inactive_count = 0; foreach ($pricing as $price) { @@ -177,8 +181,8 @@ class HomeController extends Controller 'shared' => $shared_count, 'reseller' => $reseller_count, 'misc' => $other_count, - 'labels' => DB::table('labels')->count(), - 'dns' => DB::table('d_n_s')->count(), + 'labels' => Labels::labelsCount(), + 'dns' => DNS::dnsCount(), 'total_services' => $total_services, 'total_inactive' => $inactive_count, 'total_cost_weekly' => number_format($total_cost_weekly, 2), From 70622f827b89b60ab52e18bf731e0fb34b493ba0 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 12:00:05 +1000 Subject: [PATCH 19/43] Cleaned up servers controller removed unused classes --- app/Http/Controllers/ServerController.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index ef86f74..b86a182 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -4,21 +4,15 @@ 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 { @@ -251,6 +245,7 @@ class ServerController extends Controller $server1_network = Yabs::serverCompareNetwork($server1_data[0]->yabs_id); $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); } From a054e83d1ee454c771643daffd0df7bf81780c13 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 12:01:48 +1000 Subject: [PATCH 20/43] Updated Shared controller Moved DB calls to model Used existing DB call functions --- app/Http/Controllers/SharedController.php | 70 ++++++----------------- app/Models/Labels.php | 4 +- app/Models/Shared.php | 37 ++++++++++++ 3 files changed, 58 insertions(+), 53 deletions(-) diff --git a/app/Http/Controllers/SharedController.php b/app/Http/Controllers/SharedController.php index 2f9dd78..32c5ad0 100644 --- a/app/Http/Controllers/SharedController.php +++ b/app/Http/Controllers/SharedController.php @@ -4,9 +4,7 @@ namespace App\Http\Controllers; 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 +15,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::allProviders(); - $Locations = Locations::allLocations(); - return view('shared.create', compact(['Providers', 'Locations'])); + return view('shared.create'); } public function store(Request $request) @@ -95,9 +87,7 @@ class SharedController extends Controller 'db__limit' => $request->db ]); - 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 + Shared::sharedRelatedCacheForget(); return redirect()->route('shared.index') ->with('success', 'Shared hosting created Successfully.'); @@ -105,44 +95,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) @@ -199,15 +169,15 @@ class SharedController extends Controller Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $request->id); + Cache::forget("labels_for_service.{$request->id}"); + IPs::deleteIPsAssignedTo($request->id); if (isset($request->dedicated_ip)) { 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 + Shared::sharedRelatedCacheForget(); return redirect()->route('shared.index') ->with('success', 'Shared hosting updated Successfully.'); @@ -215,21 +185,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 + Shared::sharedRelatedCacheForget(); return redirect()->route('shared.index') ->with('success', 'Shared hosting was deleted Successfully.'); diff --git a/app/Models/Labels.php b/app/Models/Labels.php index 945a682..8c7a2fc 100644 --- a/app/Models/Labels.php +++ b/app/Models/Labels.php @@ -43,11 +43,11 @@ class Labels extends Model public static function labelsForService(string $service_id) { - return Cache::remember("labels_for_service.$service_id", now()->addMinute(1), function () use ($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.label']); + ->get(['labels.id', 'labels.label']); }); } diff --git a/app/Models/Shared.php b/app/Models/Shared.php index b0805a0..d3dac0a 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,39 @@ 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 sharedRelatedCacheForget(): 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 + } + + 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.*']); + } } From 6d1cbef7404e49ea9721d4f33afe08aad9ff82f3 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 16:22:47 +1000 Subject: [PATCH 21/43] Updated Domains controller Cleaned up, Moved DB calls to model --- app/Http/Controllers/DomainsController.php | 32 +++++----------------- app/Models/Domains.php | 26 ++++++++++++++++++ 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/app/Http/Controllers/DomainsController.php b/app/Http/Controllers/DomainsController.php index 976d54f..aed9a39 100644 --- a/app/Http/Controllers/DomainsController.php +++ b/app/Http/Controllers/DomainsController.php @@ -16,35 +16,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::allProviders(); - return view('domains.create', compact('Providers')); + return view('domains.create'); } public function store(Request $request) @@ -88,15 +75,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'])); } @@ -131,6 +112,7 @@ class DomainsController extends Controller Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $domain->id); + Cache::forget("labels_for_service.{$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 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.*']); + } } From f5cc42c0fee016d01a0aab218953fc49e17f57bc Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 16:49:54 +1000 Subject: [PATCH 22/43] Updated Reseller controller Cleaned up, Moved DB calls to model --- app/Http/Controllers/ResellerController.php | 56 +++++---------------- app/Models/Reseller.php | 39 ++++++++++++++ 2 files changed, 52 insertions(+), 43 deletions(-) diff --git a/app/Http/Controllers/ResellerController.php b/app/Http/Controllers/ResellerController.php index 1faea48..142a1d4 100644 --- a/app/Http/Controllers/ResellerController.php +++ b/app/Http/Controllers/ResellerController.php @@ -17,11 +17,7 @@ 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'])); } @@ -94,9 +90,7 @@ class ResellerController extends Controller 'db_limit' => $request->db ]); - 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 + Reseller::resllerRelatedCacheForget(); return redirect()->route('reseller.index') ->with('success', 'Reseller hosting created Successfully.'); @@ -105,45 +99,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) @@ -206,9 +178,9 @@ class ResellerController extends Controller 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}"); + + Reseller::resllerRelatedCacheForget(); return redirect()->route('reseller.index') ->with('success', 'Reseller hosting updated Successfully.'); @@ -228,9 +200,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 + Reseller::resllerRelatedCacheForget(); return redirect()->route('reseller.index') ->with('success', 'Reseller hosting was deleted Successfully.'); diff --git a/app/Models/Reseller.php b/app/Models/Reseller.php index 5450568..84fb696 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,41 @@ 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 resllerRelatedCacheForget(): 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 + } + + 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.*']); + + } + } From 810954c145de42570f2cab889bd612b47b51067c Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 16:51:44 +1000 Subject: [PATCH 23/43] Added Kharkiv Ukraine to locations Added Kharkiv Ukraine to locations --- database/seeders/LocationsSeeder.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/database/seeders/LocationsSeeder.php b/database/seeders/LocationsSeeder.php index fef05d3..6cee17f 100644 --- a/database/seeders/LocationsSeeder.php +++ b/database/seeders/LocationsSeeder.php @@ -94,7 +94,8 @@ class LocationsSeeder extends Seeder ['name' => 'Washington, USA'], ['name' => 'Wellington, New Zealand'], ['name' => 'Zurich, Switzerland'], - ['name' => 'Quebec, Canada'] + ['name' => 'Quebec, Canada'], + ['name' => 'Kharkiv , Ukraine'], ]; DB::table('locations')->insert($locations); From 4cf38ba45c18ffaeae552464e4dcecfb5ef36e8c Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 16:53:57 +1000 Subject: [PATCH 24/43] Added Sao Paulo Brazil to locations Added Sao Paulo Brazil to locations --- database/seeders/LocationsSeeder.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/database/seeders/LocationsSeeder.php b/database/seeders/LocationsSeeder.php index 6cee17f..b2f27ec 100644 --- a/database/seeders/LocationsSeeder.php +++ b/database/seeders/LocationsSeeder.php @@ -95,7 +95,8 @@ class LocationsSeeder extends Seeder ['name' => 'Wellington, New Zealand'], ['name' => 'Zurich, Switzerland'], ['name' => 'Quebec, Canada'], - ['name' => 'Kharkiv , Ukraine'], + ['name' => 'Kharkiv, Ukraine'], + ['name' => 'Sao Paulo, Brazil'], ]; DB::table('locations')->insert($locations); From e4f0d95128a6c7924e58bf7d54c138cd193f0c43 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 15 May 2022 21:01:02 +1000 Subject: [PATCH 25/43] Updated Providers controller Moved show functions into model --- app/Http/Controllers/ProvidersController.php | 17 +---------------- app/Models/Providers.php | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/ProvidersController.php b/app/Http/Controllers/ProvidersController.php index 2da272a..8e4eb89 100644 --- a/app/Http/Controllers/ProvidersController.php +++ b/app/Http/Controllers/ProvidersController.php @@ -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'])); } diff --git a/app/Models/Providers.php b/app/Models/Providers.php index cee3581..e310f3a 100644 --- a/app/Models/Providers.php +++ b/app/Models/Providers.php @@ -21,4 +21,24 @@ class Providers extends Model 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); + } } From 07c0b8a655df03debaacb437dfd2896a1c1a5afc Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 12:07:35 +1000 Subject: [PATCH 26/43] Added Seed box CRUD Added Seed box CRUD --- app/Http/Controllers/SeedBoxesController.php | 169 ++++++++++++++ app/Models/SeedBoxes.php | 58 +++++ ...22_05_15_105254_create_seedboxes_table.php | 44 ++++ resources/views/layouts/navigation.blade.php | 1 + resources/views/seedboxes/create.blade.php | 173 ++++++++++++++ resources/views/seedboxes/edit.blade.php | 219 ++++++++++++++++++ resources/views/seedboxes/index.blade.php | 124 ++++++++++ resources/views/seedboxes/show.blade.php | 145 ++++++++++++ routes/web.php | 3 + 9 files changed, 936 insertions(+) create mode 100644 app/Http/Controllers/SeedBoxesController.php create mode 100644 app/Models/SeedBoxes.php create mode 100644 database/migrations/2022_05_15_105254_create_seedboxes_table.php create mode 100644 resources/views/seedboxes/create.blade.php create mode 100644 resources/views/seedboxes/edit.blade.php create mode 100644 resources/views/seedboxes/index.blade.php create mode 100644 resources/views/seedboxes/show.blade.php diff --git a/app/Http/Controllers/SeedBoxesController.php b/app/Http/Controllers/SeedBoxesController.php new file mode 100644 index 0000000..adf1b35 --- /dev/null +++ b/app/Http/Controllers/SeedBoxesController.php @@ -0,0 +1,169 @@ +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 + ]); + + SeedBoxes::seedBoxRelatedCacheForget(); + + 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}"); + + SeedBoxes::seedBoxRelatedCacheForget(); + + 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); + + SeedBoxes::seedBoxRelatedCacheForget(); + + return redirect()->route('seedboxes.index') + ->with('success', 'Seed box was deleted Successfully.'); + } +} diff --git a/app/Models/SeedBoxes.php b/app/Models/SeedBoxes.php new file mode 100644 index 0000000..3c810ba --- /dev/null +++ b/app/Models/SeedBoxes.php @@ -0,0 +1,58 @@ +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/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/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/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']); From 8e968a60c9ad6c7540600e1fb5b9c62ace382757 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 14:42:48 +1000 Subject: [PATCH 27/43] Updated Home controller Added Home model Moved most DB calls and logic into the model --- app/Http/Controllers/HomeController.php | 132 ++++---------------- app/Models/Home.php | 154 ++++++++++++++++++++++++ 2 files changed, 175 insertions(+), 111 deletions(-) create mode 100644 app/Models/Home.php diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 5a98977..60e8f82 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -3,24 +3,18 @@ namespace App\Http\Controllers; use App\Models\DNS; +use App\Models\Home; use App\Models\Labels; use App\Models\Pricing; 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'); @@ -31,77 +25,18 @@ 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(); - }); + $services_count = Home::servicesCount(); - $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']); - }); + $due_soon = Home::dueSoonData(); - $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, - ); - }); + $server_summary = Home::serverSummary(); //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($due_soon); - Cache::put('due_soon', $due_soon); + $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']); - }); - - $settings = Cache::remember('settings', 15, function () { + $settings = Cache::remember('settings', now()->addMinute(1), function () { return DB::table('settings') ->where('id', '=', 1) ->get(); @@ -118,45 +53,15 @@ class HomeController extends Controller 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::put('due_soon_amount', $settings[0]->due_soon_amount ?? 6); + Session::put('recently_added_amount', $settings[0]->recently_added_amount ?? 6); Session::save(); $all_pricing = Pricing::allPricing(); - - $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); - + $services_count = json_decode($services_count, true); - $servers_count = $domains_count = $shared_count = $reseller_count = $other_count = $total_services = 0; + $servers_count = $domains_count = $shared_count = $reseller_count = $other_count = $seedbox_count = $total_services = 0; foreach ($services_count as $sc) { $total_services += $sc['amount']; @@ -170,9 +75,13 @@ class HomeController extends Controller $domains_count = $sc['amount']; } else if ($sc['service_type'] === 5) { $other_count = $sc['amount']; + } else if ($sc['service_type'] === 6) { + $seedbox_count = $sc['amount']; } } + $pricing_breakdown = Home::breakdownPricing($all_pricing); + $p->stopTimer(); $information = array( @@ -181,14 +90,15 @@ class HomeController extends Controller 'shared' => $shared_count, 'reseller' => $reseller_count, 'misc' => $other_count, + 'seedbox' => $seedbox_count, 'labels' => Labels::labelsCount(), 'dns' => DNS::dnsCount(), '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), + '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/Models/Home.php b/app/Models/Home.php new file mode 100644 index 0000000..78864c2 --- /dev/null +++ b/app/Models/Home.php @@ -0,0 +1,154 @@ +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, + ); + } +} From f70d01552bd709c74527a54302cf1a701db63d39 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 14:43:33 +1000 Subject: [PATCH 28/43] Updated home page cache forget for Home model one Updated home page cache forget for Home model one --- app/Http/Controllers/DomainsController.php | 13 ++++--------- app/Http/Controllers/MiscController.php | 13 ++++--------- app/Http/Controllers/ResellerController.php | 7 ++++--- app/Http/Controllers/SeedBoxesController.php | 7 ++++--- app/Http/Controllers/SharedController.php | 7 ++++--- 5 files changed, 20 insertions(+), 27 deletions(-) diff --git a/app/Http/Controllers/DomainsController.php b/app/Http/Controllers/DomainsController.php index aed9a39..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; @@ -65,9 +66,7 @@ class DomainsController extends Controller Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $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.'); @@ -113,9 +112,7 @@ class DomainsController extends Controller Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $domain->id); Cache::forget("labels_for_service.{$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 Updated Successfully.'); @@ -132,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/MiscController.php b/app/Http/Controllers/MiscController.php index f52f06c..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; @@ -58,9 +59,7 @@ class MiscController extends Controller 'owned_since' => $request->owned_since ]); - 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.'); @@ -97,9 +96,7 @@ class MiscController extends Controller $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.'); @@ -114,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/ResellerController.php b/app/Http/Controllers/ResellerController.php index 142a1d4..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; @@ -90,7 +91,7 @@ class ResellerController extends Controller 'db_limit' => $request->db ]); - Reseller::resllerRelatedCacheForget(); + Home::homePageCacheForget(); return redirect()->route('reseller.index') ->with('success', 'Reseller hosting created Successfully.'); @@ -180,7 +181,7 @@ class ResellerController extends Controller Cache::forget("labels_for_service.{$request->id}"); - Reseller::resllerRelatedCacheForget(); + Home::homePageCacheForget(); return redirect()->route('reseller.index') ->with('success', 'Reseller hosting updated Successfully.'); @@ -200,7 +201,7 @@ class ResellerController extends Controller IPs::deleteIPsAssignedTo($id); - Reseller::resllerRelatedCacheForget(); + 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 index adf1b35..ed5bfe0 100644 --- a/app/Http/Controllers/SeedBoxesController.php +++ b/app/Http/Controllers/SeedBoxesController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\Home; use App\Models\IPs; use App\Models\Labels; use App\Models\Pricing; @@ -72,7 +73,7 @@ class SeedBoxesController extends Controller 'was_promo' => $request->was_promo ]); - SeedBoxes::seedBoxRelatedCacheForget(); + Home::homePageCacheForget(); return redirect()->route('seedboxes.index') ->with('success', 'Seed box created Successfully.'); @@ -144,7 +145,7 @@ class SeedBoxesController extends Controller Cache::forget("labels_for_service.{$seedbox->id}"); - SeedBoxes::seedBoxRelatedCacheForget(); + Home::homePageCacheForget(); return redirect()->route('seedboxes.index') ->with('success', 'Seed box updated Successfully.'); @@ -161,7 +162,7 @@ class SeedBoxesController extends Controller Labels::deleteLabelsAssignedTo($seedbox_id); - SeedBoxes::seedBoxRelatedCacheForget(); + Home::homePageCacheForget(); return redirect()->route('seedboxes.index') ->with('success', 'Seed box was deleted Successfully.'); diff --git a/app/Http/Controllers/SharedController.php b/app/Http/Controllers/SharedController.php index 32c5ad0..e6fd36d 100644 --- a/app/Http/Controllers/SharedController.php +++ b/app/Http/Controllers/SharedController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\Home; use App\Models\IPs; use App\Models\Labels; use App\Models\Pricing; @@ -87,7 +88,7 @@ class SharedController extends Controller 'db__limit' => $request->db ]); - Shared::sharedRelatedCacheForget(); + Home::homePageCacheForget(); return redirect()->route('shared.index') ->with('success', 'Shared hosting created Successfully.'); @@ -177,7 +178,7 @@ class SharedController extends Controller IPs::insertIP($request->id, $request->dedicated_ip); } - Shared::sharedRelatedCacheForget(); + Home::homePageCacheForget(); return redirect()->route('shared.index') ->with('success', 'Shared hosting updated Successfully.'); @@ -197,7 +198,7 @@ class SharedController extends Controller IPs::deleteIPsAssignedTo($shared_id); - Shared::sharedRelatedCacheForget(); + Home::homePageCacheForget(); return redirect()->route('shared.index') ->with('success', 'Shared hosting was deleted Successfully.'); From 81b8dcaa7437c70c20bc8dc10c0a97a25a895b9b Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 14:44:05 +1000 Subject: [PATCH 29/43] Removed defunct cache forget functions --- app/Models/Reseller.php | 8 -------- app/Models/SeedBoxes.php | 8 -------- app/Models/Shared.php | 8 -------- 3 files changed, 24 deletions(-) diff --git a/app/Models/Reseller.php b/app/Models/Reseller.php index 84fb696..b3dfd31 100644 --- a/app/Models/Reseller.php +++ b/app/Models/Reseller.php @@ -17,14 +17,6 @@ class Reseller extends Model public $incrementing = false; - - public static function resllerRelatedCacheForget(): 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 - } - public static function resellerDataIndexPage() { return DB::table('reseller_hosting as s') diff --git a/app/Models/SeedBoxes.php b/app/Models/SeedBoxes.php index 3c810ba..4582881 100644 --- a/app/Models/SeedBoxes.php +++ b/app/Models/SeedBoxes.php @@ -17,14 +17,6 @@ class SeedBoxes extends Model protected $fillable = ['id', 'active', 'title', 'hostname', 'seed_box_type', 'provider_id', 'location_id', 'bandwidth', 'port_speed', 'disk', 'disk_type', 'disk_as_gb', 'was_promo', 'owned_since']; - public static function seedBoxRelatedCacheForget(): 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_pricing');//All pricing - } - public static function seedBoxesDataIndexPage() { return DB::table('seedboxes as s') diff --git a/app/Models/Shared.php b/app/Models/Shared.php index d3dac0a..267244d 100644 --- a/app/Models/Shared.php +++ b/app/Models/Shared.php @@ -17,14 +17,6 @@ class Shared extends Model public $incrementing = false; - - public static function sharedRelatedCacheForget(): 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 - } - public static function sharedDataIndexPage() { return DB::table('shared_hosting as s') From c041976731d92538585c4984329bacfc19ea0e86 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 14:44:55 +1000 Subject: [PATCH 30/43] Updated home blade for seedboxes Updated home blade for seedboxes Fixed the view button in new services table --- resources/views/home.blade.php | 41 ++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 0edb354..5f21cf3 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -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 From 59f644a1c9f245f839b6c8819352a9a98d8ee4e3 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 14:45:22 +1000 Subject: [PATCH 31/43] Added forget all_pricing cache to Server model Added forget all_pricing cache to Server model --- app/Models/Server.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Models/Server.php b/app/Models/Server.php index a28a9e2..d807bd5 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -163,6 +163,7 @@ class Server extends Model 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 From f9e6ec1da3906f9ca2838902b7b4ad5ce8046550 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 14:54:37 +1000 Subject: [PATCH 32/43] Updated DNS controller for labels insert & delete Updated DNS controller for labels insert & delete --- app/Http/Controllers/DNSController.php | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/DNSController.php b/app/Http/Controllers/DNSController.php index dcc7715..8864e55 100644 --- a/app/Http/Controllers/DNSController.php +++ b/app/Http/Controllers/DNSController.php @@ -52,13 +52,7 @@ class DNSController extends Controller 'domain_id' => ($request->domain_id !== 'null') ? $request->domain_id : null ]); - $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)], $dns_id]); - } - } + Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $dns_id); Cache::forget('dns_count'); @@ -111,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.'); From fb22a50ff69ea338471a57a4af96f337bae19e89 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 15:39:10 +1000 Subject: [PATCH 33/43] Updated foreign keys Updated foreign keys: Removed location, provider and OS id keys --- .../2022_05_09_114227_add_foreign_keys.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/database/migrations/2022_05_09_114227_add_foreign_keys.php b/database/migrations/2022_05_09_114227_add_foreign_keys.php index 4135b27..ee7764f 100644 --- a/database/migrations/2022_05_09_114227_add_foreign_keys.php +++ b/database/migrations/2022_05_09_114227_add_foreign_keys.php @@ -9,26 +9,26 @@ class AddForeignKeys extends Migration public function up() { Schema::table('servers', function (Blueprint $table) { - $table->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('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('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('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('provider_id','domains_fk_provider')->references('id')->on('providers'); $table->foreign('id', 'domains_fk_pricing')->references('service_id')->on('pricings')->onDelete('cascade'); }); From 24a583f3fd6278ed6f8ac1d89b8f2da25830ea06 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 15:43:51 +1000 Subject: [PATCH 34/43] Added setSettingsSession function Added setSettingsSession function Moved get settings from Home controller into settings model --- app/Http/Controllers/HomeController.php | 24 +++-------------- app/Http/Controllers/SettingsController.php | 15 +---------- app/Models/Settings.php | 30 ++++++++++++++++++--- 3 files changed, 32 insertions(+), 37 deletions(-) diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 60e8f82..2491999 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -6,6 +6,7 @@ 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\Support\Facades\Cache; use Illuminate\Support\Facades\DB; @@ -36,29 +37,12 @@ class HomeController extends Controller $recently_added = Home::recentlyAdded(); - $settings = Cache::remember('settings', now()->addMinute(1), function () { - return DB::table('settings') - ->where('id', '=', 1) - ->get(); - }); + $settings = Settings::getSettings(); - 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(); + Settings::setSettingsToSession($settings); $all_pricing = Pricing::allPricing(); - + $services_count = json_decode($services_count, true); $servers_count = $domains_count = $shared_count = $reseller_count = $other_count = $seedbox_count = $total_services = 0; diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 8f72bbb..6bc444c 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -54,20 +54,7 @@ class SettingsController extends Controller 'recently_added_amount' => $request->recently_added_amount ]); - Session::put('dark_mode', $request->dark_mode ?? 1); - 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/Models/Settings.php b/app/Models/Settings.php index e485fc2..1f584b4 100644 --- a/app/Models/Settings.php +++ b/app/Models/Settings.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 Settings extends Model { @@ -16,8 +18,30 @@ class Settings extends Model public static function getSettings() { - return DB::table('settings') - ->where('id', '=', 1) - ->get(); + 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(); + } + + } From ebb8edaac38cd773483f6051cd04ceb6f04c2a21 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 16:22:19 +1000 Subject: [PATCH 35/43] Updated Home controller Moved last logics into model Added comments Simplified calls --- app/Http/Controllers/HomeController.php | 57 ++++++++----------------- app/Models/Home.php | 36 ++++++++++++++++ 2 files changed, 54 insertions(+), 39 deletions(-) diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 2491999..a1f0ce9 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -26,58 +26,37 @@ class HomeController extends Controller $p = new Process(); $p->startTimer(); - $services_count = Home::servicesCount(); - - $due_soon = Home::dueSoonData(); - - $server_summary = Home::serverSummary(); - - //Check for past due date and refresh the due date if so: - $due_soon = Home::doDueSoon($due_soon); - - $recently_added = Home::recentlyAdded(); - + //Get & set the settings, 1 minute cache $settings = Settings::getSettings(); - Settings::setSettingsToSession($settings); - $all_pricing = Pricing::allPricing(); + //Check for past due date and refresh the due date if so: + $due_soon = Home::doDueSoon(Home::dueSoonData()); - $services_count = json_decode($services_count, true); + //Orders services most recently added first, cached with limit from settings + $recently_added = Home::recentlyAdded(); - $servers_count = $domains_count = $shared_count = $reseller_count = $other_count = $seedbox_count = $total_services = 0; + //Get count tally for each of the services type + $service_count = Home::doServicesCount(Home::servicesCount()); - 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']; - } - } + //Get pricing for weekly, monthly, yearly, 2 yearly + $pricing_breakdown = Home::breakdownPricing(Pricing::allPricing()); - $pricing_breakdown = Home::breakdownPricing($all_pricing); + //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, - 'seedbox' => $seedbox_count, + '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' => $total_services, + '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), diff --git a/app/Models/Home.php b/app/Models/Home.php index 78864c2..30586ce 100644 --- a/app/Models/Home.php +++ b/app/Models/Home.php @@ -151,4 +151,40 @@ class Home extends Model '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 + ); + } + + } From e1bbcc3c9f7edb6c79dde82207cd8713912ac411 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 16:36:58 +1000 Subject: [PATCH 36/43] Added Seedbox to API Added Seedbox to API --- app/Http/Controllers/ApiController.php | 17 +++++++++++++++++ routes/api.php | 3 +++ 2 files changed, 20 insertions(+) diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index 89b64dd..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') 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'); From 0bb3d75fef2ac9d6f2f7b27fbf3a8f9cf462b046 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 16:46:08 +1000 Subject: [PATCH 37/43] Updated Readme Updated Readme --- README.md | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index c6d9cd0..a072c03 100644 --- a/README.md +++ b/README.md @@ -21,27 +21,22 @@ removed. [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 DB calls for caching +* Updated home page view links on recently added ## Requires -* PHP 8 (minimum, compatible with 8.1) +* PHP 8 (8.1 recommended) ## Features @@ -73,7 +68,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 +144,10 @@ All API requests must be appended with `api/` e.g `mydomain.com/api/servers/gYk8 `reseller/{id}` +`seedbox/` + +`seedbox/{id}` + `settings/` `shared/` From 464b2096c4e0a84361e25d1dd9f91e2fa50c4b15 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 16:46:48 +1000 Subject: [PATCH 38/43] Updated Readme Updated Readme --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index a072c03..18b7d5d 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,6 @@ 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/) -## 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. - ## Project sponsor [Cloud Five Limited](https://cloud-v.net/) for providing the hosting for demo installation. From f6cf9c7a6543bb3f489c5efb97e7a2f157dc8a17 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 21:30:52 +1000 Subject: [PATCH 39/43] Fixed YABs insert error displaying Fixed YABs insert error displaying --- app/Http/Controllers/YabsController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From 908f8b904fe3235886154b51f67dd73d8550e3e7 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 21:32:07 +1000 Subject: [PATCH 40/43] Updated YABs insert for version v2022-05-06 Updated YABs insert for version v2022-05-06 --- app/Process.php | 179 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 122 insertions(+), 57 deletions(-) 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'); From 61ae4e901101a84385325e7604428b6ecbd5b921 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 21:35:33 +1000 Subject: [PATCH 41/43] Updated Readme Updated Readme --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 18b7d5d..216d9e6 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # 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/) ## Project sponsor @@ -23,8 +23,10 @@ GeekBench 5 scores to do easier comparing and sorting. * 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 for caching * Updated home page view links on recently added +* Fixed YABs insert error not displaying ## Requires From 2c8ad166e4426ce3ea2bfd037f7596ff6669a9f4 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 23:14:20 +1000 Subject: [PATCH 42/43] Added demo site to Readme Added demo site to Readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 216d9e6..f370e87 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ GeekBench 5 scores to do easier comparing and sorting. [![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/) +[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. From 5e953d2c64c29ef483777ba16445a98df0547d40 Mon Sep 17 00:00:00 2001 From: cp6 Date: Mon, 16 May 2022 23:16:40 +1000 Subject: [PATCH 43/43] Updated readme Updated readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f370e87..8c4fabf 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,8 @@ GeekBench 5 scores to do easier comparing and sorting. * 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 for caching +* 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