diff --git a/app/Classes/Settings/System.php b/app/Classes/Settings/System.php index 286fa6ee..7914269f 100644 --- a/app/Classes/Settings/System.php +++ b/app/Classes/Settings/System.php @@ -7,6 +7,8 @@ use App\Models\Settings; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Validator; +use Qirolab\Theme\Theme; + class System { @@ -102,6 +104,7 @@ class System "SETTINGS::SYSTEM:ALERT_ENABLED" => "alert-enabled", "SETTINGS::SYSTEM:ALERT_TYPE" => "alert-type", "SETTINGS::SYSTEM:ALERT_MESSAGE" => "alert-message", + "SETTINGS::SYSTEM:THEME" => "theme", ]; foreach ($values as $key => $value) { @@ -111,6 +114,11 @@ class System Cache::forget('setting'.':'.$key); } + //SET THEME + $theme = $request->get('theme'); + Theme::set($theme); + + return redirect(route('admin.settings.index').'#system')->with('success', __('System settings updated!')); } diff --git a/app/Http/Controllers/Admin/SettingsController.php b/app/Http/Controllers/Admin/SettingsController.php index ec317385..ad1b3a36 100644 --- a/app/Http/Controllers/Admin/SettingsController.php +++ b/app/Http/Controllers/Admin/SettingsController.php @@ -7,6 +7,7 @@ use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Http\Response; +use Qirolab\Theme\Theme; class SettingsController extends Controller { @@ -17,12 +18,15 @@ class SettingsController extends Controller */ public function index() { + + //Get all tabs as laravel view paths $tabs = []; - foreach (glob(resource_path('views/admin/settings/tabs/*.blade.php')) as $filename) { + foreach (glob(Theme::getViewPaths()[0] . '/admin/settings/tabs/*.blade.php') as $filename) { $tabs[] = 'admin.settings.tabs.'.basename($filename, '.blade.php'); } + //Generate a html list item for each tab based on tabs file basename, set first tab as active $tabListItems = []; foreach ($tabs as $tab) { @@ -33,9 +37,13 @@ class SettingsController extends Controller '; } + $themes = array_diff(scandir(base_path('themes')), array('..', '.')); + return view('admin.settings.index', [ 'tabs' => $tabs, 'tabListItems' => $tabListItems, + 'themes' => $themes, + 'active_theme' => Theme::active(), ]); } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 2e382312..ff22ee04 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -10,6 +10,7 @@ use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Validator; use Illuminate\Support\ServiceProvider; +use Qirolab\Theme\Theme; class AppServiceProvider extends ServiceProvider { @@ -60,6 +61,15 @@ class AppServiceProvider extends ServiceProvider config([$setting->key => $setting->value]); } + + if(!file_exists(base_path('themes')."/".config("SETTINGS::SYSTEM:THEME"))){ + config(['SETTINGS::SYSTEM:THEME' => "default"]); + } + + if(config('theme.active') == null){ + Theme::set(config("SETTINGS::SYSTEM:THEME")); + } + // Set Mail Config //only update config if mail settings have changed in DB if ( diff --git a/composer.json b/composer.json index 0b5e2576..9ac88fdd 100644 --- a/composer.json +++ b/composer.json @@ -22,6 +22,7 @@ "league/flysystem-aws-s3-v3": "^3.0", "paypal/paypal-checkout-sdk": "^1.0", "paypal/rest-api-sdk-php": "^1.14", + "qirolab/laravel-themer": "^2.0", "socialiteproviders/discord": "^4.1", "spatie/laravel-activitylog": "^4.4", "spatie/laravel-query-builder": "^5.0", diff --git a/composer.lock b/composer.lock index febe3774..22199e07 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8c024e627a38373a5d538e20061aff8f", + "content-hash": "be76c9bab8622d363a4eb843794e9e3e", "packages": [ { "name": "aws/aws-crt-php", @@ -1126,6 +1126,59 @@ ], "time": "2023-01-02T17:26:14+00:00" }, + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, { "name": "fruitcake/php-cors", "version": "v1.2.0", @@ -4180,6 +4233,76 @@ }, "time": "2022-12-23T17:47:18+00:00" }, + { + "name": "qirolab/laravel-themer", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/qirolab/laravel-themer.git", + "reference": "9c4e17fe7334c921bf5c57395d926154cc25a1e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/qirolab/laravel-themer/zipball/9c4e17fe7334c921bf5c57395d926154cc25a1e8", + "reference": "9c4e17fe7334c921bf5c57395d926154cc25a1e8", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "^1.0", + "illuminate/support": "^9.19", + "php": ">=7.1.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0", + "phpunit/phpunit": "^8.3|^9.0", + "vimeo/psalm": "^4.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Qirolab\\Theme\\ThemeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Qirolab\\Theme\\": "src", + "Qirolab\\Theme\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Harish Kumar", + "email": "harish@qirolab.com", + "homepage": "https://qirolab.com", + "role": "Developer" + } + ], + "description": "A Laravel theme manager, that will help you organize and maintain your themes inside Laravel projects.", + "homepage": "https://qirolab.com", + "keywords": [ + "laravel", + "laravel-theme", + "qirolab", + "theme" + ], + "support": { + "issues": "https://github.com/qirolab/laravel-themer/issues", + "source": "https://github.com/qirolab/laravel-themer/tree/2.0.2" + }, + "funding": [ + { + "url": "https://www.buymeacoffee.com/qirolab", + "type": "other" + } + ], + "time": "2022-09-03T21:30:32+00:00" + }, { "name": "ralouphie/getallheaders", "version": "3.0.3", diff --git a/config/theme.php b/config/theme.php new file mode 100644 index 00000000..6cabba75 --- /dev/null +++ b/config/theme.php @@ -0,0 +1,34 @@ + null, + + /* + |-------------------------------------------------------------------------- + | Parent Theme + |-------------------------------------------------------------------------- + | + | This is a parent theme for the theme specified in the active config + | option. It works like the WordPress style theme hierarchy, if the blade + | file is not found in the currently active theme, then it will look for it + | in the parent theme. + */ + 'parent' => "default", + + /* + |-------------------------------------------------------------------------- + | Base Path + |-------------------------------------------------------------------------- + | + | The base path where all the themes are located. + */ + 'base_path' => base_path('themes') +]; diff --git a/database/seeders/Seeds/SettingsSeeder.php b/database/seeders/Seeds/SettingsSeeder.php index 15a8acb3..56b5ca3a 100644 --- a/database/seeders/Seeds/SettingsSeeder.php +++ b/database/seeders/Seeds/SettingsSeeder.php @@ -597,5 +597,12 @@ class SettingsSeeder extends Seeder 'type' => 'text', 'description' => 'Changes the Content the Alert', ]); + Settings::firstOrCreate([ + 'key' => 'SETTINGS::SYSTEM:THEME', + ], [ + 'value' => 'default', + 'type' => 'text', + 'description' => 'Current active theme', + ]); } } diff --git a/package-lock.json b/package-lock.json index e9cdc147..a27c06bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,20 @@ { - "name": "controllpanelgg", + "name": "dashboard", "lockfileVersion": 2, "requires": true, "packages": { "": { "devDependencies": { - "axios": "^0.21", - "bootstrap": "^4.0.0", - "jquery": "^3.2", + "axios": "^0.25", + "bootstrap": "^4.6.0", + "jquery": "^3.5", "laravel-mix": "^6.0.6", "lodash": "^4.17.19", - "popper.js": "^1.12", + "popper.js": "^1.16", "postcss": "^8.1.14", "resolve-url-loader": "^3.1.2", - "sass": "^1.15.2", - "sass-loader": "^8.0.0" + "sass": "^1.32.1", + "sass-loader": "^10.1.1" } }, "node_modules/@babel/code-frame": { @@ -1633,9 +1633,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "node_modules/@types/micromatch": { @@ -2262,12 +2262,12 @@ } }, "node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", "dev": true, "dependencies": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.7" } }, "node_modules/babel-loader": { @@ -5454,9 +5454,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", - "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true, "funding": [ { @@ -11728,19 +11728,19 @@ } }, "node_modules/sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.4.1.tgz", + "integrity": "sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==", "dev": true, "dependencies": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" }, "engines": { - "node": ">= 8.9.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -11748,7 +11748,7 @@ }, "peerDependencies": { "fibers": ">= 3.1.0", - "node-sass": "^4.0.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "sass": "^1.3.0", "webpack": "^4.36.0 || ^5.0.0" }, @@ -11764,13 +11764,51 @@ } } }, - "node_modules/sass-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/sass-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/sass-loader/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/sax": { @@ -15169,9 +15207,9 @@ } }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/micromatch": { @@ -15705,12 +15743,12 @@ } }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", "dev": true, "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.7" } }, "babel-loader": { @@ -18293,9 +18331,9 @@ } }, "follow-redirects": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", - "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true }, "for-in": { @@ -23134,23 +23172,48 @@ } }, "sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.4.1.tgz", + "integrity": "sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==", "dev": true, "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" }, "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, diff --git a/package.json b/package.json index efd1945c..a8b934a5 100644 --- a/package.json +++ b/package.json @@ -7,18 +7,22 @@ "watch-poll": "mix watch -- --watch-options-poll=1000", "hot": "mix watch --hot", "prod": "npm run production", - "production": "mix --production" + "production": "mix --production", + "dev:default": "vite --config themes/default/vite.config.js", + "build:default": "vite build --config themes/default/vite.config.js", + "dev:1day2die": "vite --config themes/1day2die/vite.config.js", + "build:1day2die": "vite build --config themes/1day2die/vite.config.js" }, "devDependencies": { "axios": "^0.25", - "bootstrap": "^4.0.0", - "jquery": "^3.2", + "bootstrap": "^4.6.0", + "jquery": "^3.5", "laravel-mix": "^6.0.6", "lodash": "^4.17.19", - "popper.js": "^1.12", + "popper.js": "^1.16", "postcss": "^8.1.14", "resolve-url-loader": "^3.1.2", - "sass": "^1.15.2", - "sass-loader": "^8.0.0" + "sass": "^1.32.1", + "sass-loader": "^10.1.1" } } diff --git a/themes/1day2die/js/app.js b/themes/1day2die/js/app.js new file mode 100644 index 00000000..af168ebe --- /dev/null +++ b/themes/1day2die/js/app.js @@ -0,0 +1,7 @@ +/** + * First we will load all of this project's JavaScript dependencies which + * includes Vue and other libraries. It is a great starting point when + * building robust, powerful web applications using Vue and Laravel. + */ + +import "./bootstrap"; diff --git a/themes/1day2die/js/bootstrap.js b/themes/1day2die/js/bootstrap.js new file mode 100644 index 00000000..bfa7eda4 --- /dev/null +++ b/themes/1day2die/js/bootstrap.js @@ -0,0 +1,48 @@ +import _ from "lodash"; +window._ = _; + +/** + * We'll load jQuery and the Bootstrap jQuery plugin which provides support + * for JavaScript based Bootstrap features such as modals and tabs. This + * code may be modified to fit the specific needs of your application. + */ +import * as Popper from "popper.js"; +window.Popper = Popper; + +import jquery from "jquery"; +window.$ = window.jQuery = jquery; + +// Import all of Bootstrap's JS +import * as bootstrap from "bootstrap"; + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +import axios from "axios"; +window.axios = axios; + +window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// import Pusher from 'pusher-js'; +// window.Pusher = Pusher; + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: import.meta.env.VITE_PUSHER_APP_KEY, +// wsHost: import.meta.env.VITE_PUSHER_HOST ?? `ws-${import.meta.env.VITE_PUSHER_CLUSTER}.pusher.com`, +// wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80, +// wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443, +// forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https', +// enabledTransports: ['ws', 'wss'], +// }); diff --git a/themes/1day2die/sass/_variables.scss b/themes/1day2die/sass/_variables.scss new file mode 100644 index 00000000..0407ab57 --- /dev/null +++ b/themes/1day2die/sass/_variables.scss @@ -0,0 +1,19 @@ +// Body +$body-bg: #f8fafc; + +// Typography +$font-family-sans-serif: 'Nunito', sans-serif; +$font-size-base: 0.9rem; +$line-height-base: 1.6; + +// Colors +$blue: #3490dc; +$indigo: #6574cd; +$purple: #9561e2; +$pink: #f66d9b; +$red: #e3342f; +$orange: #f6993f; +$yellow: #ffed4a; +$green: #38c172; +$teal: #4dc0b5; +$cyan: #6cb2eb; diff --git a/themes/1day2die/sass/app.scss b/themes/1day2die/sass/app.scss new file mode 100644 index 00000000..3193ffa2 --- /dev/null +++ b/themes/1day2die/sass/app.scss @@ -0,0 +1,8 @@ +// Fonts +@import url('https://fonts.googleapis.com/css?family=Nunito'); + +// Variables +@import 'variables'; + +// Bootstrap +@import '~bootstrap/scss/bootstrap'; diff --git a/resources/views/admin/activitylogs/index.blade.php b/themes/1day2die/views/admin/activitylogs/index.blade.php similarity index 100% rename from resources/views/admin/activitylogs/index.blade.php rename to themes/1day2die/views/admin/activitylogs/index.blade.php diff --git a/resources/views/admin/api/create.blade.php b/themes/1day2die/views/admin/api/create.blade.php similarity index 100% rename from resources/views/admin/api/create.blade.php rename to themes/1day2die/views/admin/api/create.blade.php diff --git a/resources/views/admin/api/edit.blade.php b/themes/1day2die/views/admin/api/edit.blade.php similarity index 100% rename from resources/views/admin/api/edit.blade.php rename to themes/1day2die/views/admin/api/edit.blade.php diff --git a/resources/views/admin/api/index.blade.php b/themes/1day2die/views/admin/api/index.blade.php similarity index 100% rename from resources/views/admin/api/index.blade.php rename to themes/1day2die/views/admin/api/index.blade.php diff --git a/resources/views/admin/nests/index.blade.php b/themes/1day2die/views/admin/nests/index.blade.php similarity index 100% rename from resources/views/admin/nests/index.blade.php rename to themes/1day2die/views/admin/nests/index.blade.php diff --git a/resources/views/admin/nodes/index.blade.php b/themes/1day2die/views/admin/nodes/index.blade.php similarity index 100% rename from resources/views/admin/nodes/index.blade.php rename to themes/1day2die/views/admin/nodes/index.blade.php diff --git a/resources/views/admin/overview/index.blade.php b/themes/1day2die/views/admin/overview/index.blade.php similarity index 100% rename from resources/views/admin/overview/index.blade.php rename to themes/1day2die/views/admin/overview/index.blade.php diff --git a/resources/views/admin/partners/create.blade.php b/themes/1day2die/views/admin/partners/create.blade.php similarity index 100% rename from resources/views/admin/partners/create.blade.php rename to themes/1day2die/views/admin/partners/create.blade.php diff --git a/resources/views/admin/partners/edit.blade.php b/themes/1day2die/views/admin/partners/edit.blade.php similarity index 100% rename from resources/views/admin/partners/edit.blade.php rename to themes/1day2die/views/admin/partners/edit.blade.php diff --git a/resources/views/admin/partners/index.blade.php b/themes/1day2die/views/admin/partners/index.blade.php similarity index 100% rename from resources/views/admin/partners/index.blade.php rename to themes/1day2die/views/admin/partners/index.blade.php diff --git a/resources/views/admin/payments/index.blade.php b/themes/1day2die/views/admin/payments/index.blade.php similarity index 100% rename from resources/views/admin/payments/index.blade.php rename to themes/1day2die/views/admin/payments/index.blade.php diff --git a/resources/views/admin/products/create.blade.php b/themes/1day2die/views/admin/products/create.blade.php similarity index 100% rename from resources/views/admin/products/create.blade.php rename to themes/1day2die/views/admin/products/create.blade.php diff --git a/resources/views/admin/products/edit.blade.php b/themes/1day2die/views/admin/products/edit.blade.php similarity index 100% rename from resources/views/admin/products/edit.blade.php rename to themes/1day2die/views/admin/products/edit.blade.php diff --git a/resources/views/admin/products/index.blade.php b/themes/1day2die/views/admin/products/index.blade.php similarity index 100% rename from resources/views/admin/products/index.blade.php rename to themes/1day2die/views/admin/products/index.blade.php diff --git a/resources/views/admin/products/show.blade.php b/themes/1day2die/views/admin/products/show.blade.php similarity index 100% rename from resources/views/admin/products/show.blade.php rename to themes/1day2die/views/admin/products/show.blade.php diff --git a/resources/views/admin/servers/edit.blade.php b/themes/1day2die/views/admin/servers/edit.blade.php similarity index 100% rename from resources/views/admin/servers/edit.blade.php rename to themes/1day2die/views/admin/servers/edit.blade.php diff --git a/resources/views/admin/servers/index.blade.php b/themes/1day2die/views/admin/servers/index.blade.php similarity index 100% rename from resources/views/admin/servers/index.blade.php rename to themes/1day2die/views/admin/servers/index.blade.php diff --git a/resources/views/admin/servers/table.blade.php b/themes/1day2die/views/admin/servers/table.blade.php similarity index 100% rename from resources/views/admin/servers/table.blade.php rename to themes/1day2die/views/admin/servers/table.blade.php diff --git a/resources/views/admin/settings/index.blade.php b/themes/1day2die/views/admin/settings/index.blade.php similarity index 100% rename from resources/views/admin/settings/index.blade.php rename to themes/1day2die/views/admin/settings/index.blade.php diff --git a/resources/views/admin/settings/tabs/invoices.blade.php b/themes/1day2die/views/admin/settings/tabs/invoices.blade.php similarity index 100% rename from resources/views/admin/settings/tabs/invoices.blade.php rename to themes/1day2die/views/admin/settings/tabs/invoices.blade.php diff --git a/resources/views/admin/settings/tabs/language.blade.php b/themes/1day2die/views/admin/settings/tabs/language.blade.php similarity index 100% rename from resources/views/admin/settings/tabs/language.blade.php rename to themes/1day2die/views/admin/settings/tabs/language.blade.php diff --git a/resources/views/admin/settings/tabs/misc.blade.php b/themes/1day2die/views/admin/settings/tabs/misc.blade.php similarity index 100% rename from resources/views/admin/settings/tabs/misc.blade.php rename to themes/1day2die/views/admin/settings/tabs/misc.blade.php diff --git a/resources/views/admin/settings/tabs/payment.blade.php b/themes/1day2die/views/admin/settings/tabs/payment.blade.php similarity index 100% rename from resources/views/admin/settings/tabs/payment.blade.php rename to themes/1day2die/views/admin/settings/tabs/payment.blade.php diff --git a/themes/1day2die/views/admin/settings/tabs/system.blade.php b/themes/1day2die/views/admin/settings/tabs/system.blade.php new file mode 100644 index 00000000..d4cf685b --- /dev/null +++ b/themes/1day2die/views/admin/settings/tabs/system.blade.php @@ -0,0 +1 @@ +you shall not pass nigger diff --git a/resources/views/admin/store/create.blade.php b/themes/1day2die/views/admin/store/create.blade.php similarity index 100% rename from resources/views/admin/store/create.blade.php rename to themes/1day2die/views/admin/store/create.blade.php diff --git a/resources/views/admin/store/edit.blade.php b/themes/1day2die/views/admin/store/edit.blade.php similarity index 100% rename from resources/views/admin/store/edit.blade.php rename to themes/1day2die/views/admin/store/edit.blade.php diff --git a/resources/views/admin/store/index.blade.php b/themes/1day2die/views/admin/store/index.blade.php similarity index 100% rename from resources/views/admin/store/index.blade.php rename to themes/1day2die/views/admin/store/index.blade.php diff --git a/resources/views/admin/usefullinks/create.blade.php b/themes/1day2die/views/admin/usefullinks/create.blade.php similarity index 100% rename from resources/views/admin/usefullinks/create.blade.php rename to themes/1day2die/views/admin/usefullinks/create.blade.php diff --git a/resources/views/admin/usefullinks/edit.blade.php b/themes/1day2die/views/admin/usefullinks/edit.blade.php similarity index 100% rename from resources/views/admin/usefullinks/edit.blade.php rename to themes/1day2die/views/admin/usefullinks/edit.blade.php diff --git a/resources/views/admin/usefullinks/index.blade.php b/themes/1day2die/views/admin/usefullinks/index.blade.php similarity index 100% rename from resources/views/admin/usefullinks/index.blade.php rename to themes/1day2die/views/admin/usefullinks/index.blade.php diff --git a/resources/views/admin/users/edit.blade.php b/themes/1day2die/views/admin/users/edit.blade.php similarity index 100% rename from resources/views/admin/users/edit.blade.php rename to themes/1day2die/views/admin/users/edit.blade.php diff --git a/resources/views/admin/users/index.blade.php b/themes/1day2die/views/admin/users/index.blade.php similarity index 100% rename from resources/views/admin/users/index.blade.php rename to themes/1day2die/views/admin/users/index.blade.php diff --git a/resources/views/admin/users/notifications.blade.php b/themes/1day2die/views/admin/users/notifications.blade.php similarity index 100% rename from resources/views/admin/users/notifications.blade.php rename to themes/1day2die/views/admin/users/notifications.blade.php diff --git a/resources/views/admin/users/show.blade.php b/themes/1day2die/views/admin/users/show.blade.php similarity index 100% rename from resources/views/admin/users/show.blade.php rename to themes/1day2die/views/admin/users/show.blade.php diff --git a/resources/views/admin/vouchers/create.blade.php b/themes/1day2die/views/admin/vouchers/create.blade.php similarity index 100% rename from resources/views/admin/vouchers/create.blade.php rename to themes/1day2die/views/admin/vouchers/create.blade.php diff --git a/resources/views/admin/vouchers/edit.blade.php b/themes/1day2die/views/admin/vouchers/edit.blade.php similarity index 100% rename from resources/views/admin/vouchers/edit.blade.php rename to themes/1day2die/views/admin/vouchers/edit.blade.php diff --git a/resources/views/admin/vouchers/index.blade.php b/themes/1day2die/views/admin/vouchers/index.blade.php similarity index 100% rename from resources/views/admin/vouchers/index.blade.php rename to themes/1day2die/views/admin/vouchers/index.blade.php diff --git a/resources/views/admin/vouchers/users.blade.php b/themes/1day2die/views/admin/vouchers/users.blade.php similarity index 100% rename from resources/views/admin/vouchers/users.blade.php rename to themes/1day2die/views/admin/vouchers/users.blade.php diff --git a/resources/views/auth/login.blade.php b/themes/1day2die/views/auth/login.blade.php similarity index 100% rename from resources/views/auth/login.blade.php rename to themes/1day2die/views/auth/login.blade.php diff --git a/resources/views/auth/passwords/confirm.blade.php b/themes/1day2die/views/auth/passwords/confirm.blade.php similarity index 100% rename from resources/views/auth/passwords/confirm.blade.php rename to themes/1day2die/views/auth/passwords/confirm.blade.php diff --git a/resources/views/auth/passwords/email.blade.php b/themes/1day2die/views/auth/passwords/email.blade.php similarity index 100% rename from resources/views/auth/passwords/email.blade.php rename to themes/1day2die/views/auth/passwords/email.blade.php diff --git a/resources/views/auth/passwords/reset.blade.php b/themes/1day2die/views/auth/passwords/reset.blade.php similarity index 100% rename from resources/views/auth/passwords/reset.blade.php rename to themes/1day2die/views/auth/passwords/reset.blade.php diff --git a/resources/views/auth/register.blade.php b/themes/1day2die/views/auth/register.blade.php similarity index 100% rename from resources/views/auth/register.blade.php rename to themes/1day2die/views/auth/register.blade.php diff --git a/resources/views/auth/verify.blade.php b/themes/1day2die/views/auth/verify.blade.php similarity index 100% rename from resources/views/auth/verify.blade.php rename to themes/1day2die/views/auth/verify.blade.php diff --git a/resources/views/home.blade.php b/themes/1day2die/views/home.blade.php similarity index 100% rename from resources/views/home.blade.php rename to themes/1day2die/views/home.blade.php diff --git a/resources/views/information/imprint-content.blade.php b/themes/1day2die/views/information/imprint-content.blade.php similarity index 100% rename from resources/views/information/imprint-content.blade.php rename to themes/1day2die/views/information/imprint-content.blade.php diff --git a/resources/views/information/imprint.blade.php b/themes/1day2die/views/information/imprint.blade.php similarity index 100% rename from resources/views/information/imprint.blade.php rename to themes/1day2die/views/information/imprint.blade.php diff --git a/resources/views/information/privacy-content.blade.php b/themes/1day2die/views/information/privacy-content.blade.php similarity index 100% rename from resources/views/information/privacy-content.blade.php rename to themes/1day2die/views/information/privacy-content.blade.php diff --git a/resources/views/information/privacy.blade.php b/themes/1day2die/views/information/privacy.blade.php similarity index 100% rename from resources/views/information/privacy.blade.php rename to themes/1day2die/views/information/privacy.blade.php diff --git a/resources/views/information/tos-content.blade.php b/themes/1day2die/views/information/tos-content.blade.php similarity index 100% rename from resources/views/information/tos-content.blade.php rename to themes/1day2die/views/information/tos-content.blade.php diff --git a/resources/views/information/tos.blade.php b/themes/1day2die/views/information/tos.blade.php similarity index 100% rename from resources/views/information/tos.blade.php rename to themes/1day2die/views/information/tos.blade.php diff --git a/resources/views/layouts/app.blade.php b/themes/1day2die/views/layouts/app.blade.php similarity index 100% rename from resources/views/layouts/app.blade.php rename to themes/1day2die/views/layouts/app.blade.php diff --git a/resources/views/layouts/main.blade.php b/themes/1day2die/views/layouts/main.blade.php similarity index 100% rename from resources/views/layouts/main.blade.php rename to themes/1day2die/views/layouts/main.blade.php diff --git a/resources/views/mail/payment/confirmed.blade.php b/themes/1day2die/views/mail/payment/confirmed.blade.php similarity index 100% rename from resources/views/mail/payment/confirmed.blade.php rename to themes/1day2die/views/mail/payment/confirmed.blade.php diff --git a/resources/views/mail/ticket/admin/create.blade.php b/themes/1day2die/views/mail/ticket/admin/create.blade.php similarity index 100% rename from resources/views/mail/ticket/admin/create.blade.php rename to themes/1day2die/views/mail/ticket/admin/create.blade.php diff --git a/resources/views/mail/ticket/admin/reply.blade.php b/themes/1day2die/views/mail/ticket/admin/reply.blade.php similarity index 100% rename from resources/views/mail/ticket/admin/reply.blade.php rename to themes/1day2die/views/mail/ticket/admin/reply.blade.php diff --git a/resources/views/mail/ticket/user/create.blade.php b/themes/1day2die/views/mail/ticket/user/create.blade.php similarity index 100% rename from resources/views/mail/ticket/user/create.blade.php rename to themes/1day2die/views/mail/ticket/user/create.blade.php diff --git a/resources/views/mail/ticket/user/reply.blade.php b/themes/1day2die/views/mail/ticket/user/reply.blade.php similarity index 100% rename from resources/views/mail/ticket/user/reply.blade.php rename to themes/1day2die/views/mail/ticket/user/reply.blade.php diff --git a/resources/views/models/redeem_voucher_modal.blade.php b/themes/1day2die/views/models/redeem_voucher_modal.blade.php similarity index 100% rename from resources/views/models/redeem_voucher_modal.blade.php rename to themes/1day2die/views/models/redeem_voucher_modal.blade.php diff --git a/resources/views/moderator/ticket/blacklist.blade.php b/themes/1day2die/views/moderator/ticket/blacklist.blade.php similarity index 100% rename from resources/views/moderator/ticket/blacklist.blade.php rename to themes/1day2die/views/moderator/ticket/blacklist.blade.php diff --git a/resources/views/moderator/ticket/index.blade.php b/themes/1day2die/views/moderator/ticket/index.blade.php similarity index 100% rename from resources/views/moderator/ticket/index.blade.php rename to themes/1day2die/views/moderator/ticket/index.blade.php diff --git a/resources/views/moderator/ticket/show.blade.php b/themes/1day2die/views/moderator/ticket/show.blade.php similarity index 100% rename from resources/views/moderator/ticket/show.blade.php rename to themes/1day2die/views/moderator/ticket/show.blade.php diff --git a/resources/views/notifications/index.blade.php b/themes/1day2die/views/notifications/index.blade.php similarity index 100% rename from resources/views/notifications/index.blade.php rename to themes/1day2die/views/notifications/index.blade.php diff --git a/resources/views/notifications/show.blade.php b/themes/1day2die/views/notifications/show.blade.php similarity index 100% rename from resources/views/notifications/show.blade.php rename to themes/1day2die/views/notifications/show.blade.php diff --git a/resources/views/profile/index.blade.php b/themes/1day2die/views/profile/index.blade.php similarity index 100% rename from resources/views/profile/index.blade.php rename to themes/1day2die/views/profile/index.blade.php diff --git a/resources/views/servers/create.blade.php b/themes/1day2die/views/servers/create.blade.php similarity index 99% rename from resources/views/servers/create.blade.php rename to themes/1day2die/views/servers/create.blade.php index d27f6253..a24d2284 100644 --- a/resources/views/servers/create.blade.php +++ b/themes/1day2die/views/servers/create.blade.php @@ -227,7 +227,7 @@ :disabled="product.minimum_credits > user.credits||product.doesNotFit == true" :class="product.minimum_credits > user.credits ? 'disabled' : ''" class="btn btn-primary btn-block mt-2" @click="setProduct(product.id)" - x-text=" product.doesNotFit == true? '{{ __('Server can\'t fit on this node') }}' : (product.minimum_credits > user.credits ? '{{ __('Not enough') }} {{ CREDITS_DISPLAY_NAME }}!' : '{{ __('Create server') }}')"> + x-text=" product.doesNotFit == true? '{{ __("Server cant fit on this Node") }}' : (product.minimum_credits > user.credits ? '{{ __('Not enough') }} {{ CREDITS_DISPLAY_NAME }}!' : '{{ __('Create server') }}')"> diff --git a/resources/views/servers/index.blade.php b/themes/1day2die/views/servers/index.blade.php similarity index 100% rename from resources/views/servers/index.blade.php rename to themes/1day2die/views/servers/index.blade.php diff --git a/resources/views/servers/settings.blade.php b/themes/1day2die/views/servers/settings.blade.php similarity index 100% rename from resources/views/servers/settings.blade.php rename to themes/1day2die/views/servers/settings.blade.php diff --git a/resources/views/store/checkout.blade.php b/themes/1day2die/views/store/checkout.blade.php similarity index 100% rename from resources/views/store/checkout.blade.php rename to themes/1day2die/views/store/checkout.blade.php diff --git a/resources/views/store/index.blade.php b/themes/1day2die/views/store/index.blade.php similarity index 100% rename from resources/views/store/index.blade.php rename to themes/1day2die/views/store/index.blade.php diff --git a/resources/views/ticket/create.blade.php b/themes/1day2die/views/ticket/create.blade.php similarity index 100% rename from resources/views/ticket/create.blade.php rename to themes/1day2die/views/ticket/create.blade.php diff --git a/resources/views/ticket/index.blade.php b/themes/1day2die/views/ticket/index.blade.php similarity index 100% rename from resources/views/ticket/index.blade.php rename to themes/1day2die/views/ticket/index.blade.php diff --git a/resources/views/ticket/show.blade.php b/themes/1day2die/views/ticket/show.blade.php similarity index 100% rename from resources/views/ticket/show.blade.php rename to themes/1day2die/views/ticket/show.blade.php diff --git a/resources/views/vendor/invoices/templates/controlpanel.blade.php b/themes/1day2die/views/vendor/invoices/templates/controlpanel.blade.php similarity index 100% rename from resources/views/vendor/invoices/templates/controlpanel.blade.php rename to themes/1day2die/views/vendor/invoices/templates/controlpanel.blade.php diff --git a/resources/views/vendor/invoices/templates/default.blade.php b/themes/1day2die/views/vendor/invoices/templates/default.blade.php similarity index 100% rename from resources/views/vendor/invoices/templates/default.blade.php rename to themes/1day2die/views/vendor/invoices/templates/default.blade.php diff --git a/themes/1day2die/vite.config.js b/themes/1day2die/vite.config.js new file mode 100644 index 00000000..16e14ee1 --- /dev/null +++ b/themes/1day2die/vite.config.js @@ -0,0 +1,37 @@ +import { defineConfig } from "vite"; +import laravel from "laravel-vite-plugin"; +import path from "path"; + + + +export default defineConfig({ + plugins: [ + laravel({ + input: [ + "themes/1day2die/sass/app.scss", + "themes/1day2die/js/app.js" + ], + buildDirectory: "1day2die", + }), + + + { + name: "blade", + handleHotUpdate({ file, server }) { + if (file.endsWith(".blade.php")) { + server.ws.send({ + type: "full-reload", + path: "*", + }); + } + }, + }, + ], + resolve: { + alias: { + '@': '/themes/1day2die/js', + '~bootstrap': path.resolve('node_modules/bootstrap'), + } + }, + +}); diff --git a/resources/css/adminlte.min.css b/themes/default/css/adminlte.min.css similarity index 100% rename from resources/css/adminlte.min.css rename to themes/default/css/adminlte.min.css diff --git a/resources/css/slim.min.css b/themes/default/css/slim.min.css similarity index 100% rename from resources/css/slim.min.css rename to themes/default/css/slim.min.css diff --git a/resources/css/stylesheet.css b/themes/default/css/stylesheet.css similarity index 100% rename from resources/css/stylesheet.css rename to themes/default/css/stylesheet.css diff --git a/resources/js/adminlte.js b/themes/default/js/adminlte.js similarity index 100% rename from resources/js/adminlte.js rename to themes/default/js/adminlte.js diff --git a/resources/js/alpine.js b/themes/default/js/alpine.js similarity index 100% rename from resources/js/alpine.js rename to themes/default/js/alpine.js diff --git a/resources/js/app.js b/themes/default/js/app.js similarity index 100% rename from resources/js/app.js rename to themes/default/js/app.js diff --git a/resources/js/bootstrap.js b/themes/default/js/bootstrap.js similarity index 100% rename from resources/js/bootstrap.js rename to themes/default/js/bootstrap.js diff --git a/resources/js/jquery.js b/themes/default/js/jquery.js similarity index 100% rename from resources/js/jquery.js rename to themes/default/js/jquery.js diff --git a/resources/js/slim.kickstart.min.js b/themes/default/js/slim.kickstart.min.js similarity index 100% rename from resources/js/slim.kickstart.min.js rename to themes/default/js/slim.kickstart.min.js diff --git a/themes/default/sass/_variables.scss b/themes/default/sass/_variables.scss new file mode 100644 index 00000000..0407ab57 --- /dev/null +++ b/themes/default/sass/_variables.scss @@ -0,0 +1,19 @@ +// Body +$body-bg: #f8fafc; + +// Typography +$font-family-sans-serif: 'Nunito', sans-serif; +$font-size-base: 0.9rem; +$line-height-base: 1.6; + +// Colors +$blue: #3490dc; +$indigo: #6574cd; +$purple: #9561e2; +$pink: #f66d9b; +$red: #e3342f; +$orange: #f6993f; +$yellow: #ffed4a; +$green: #38c172; +$teal: #4dc0b5; +$cyan: #6cb2eb; diff --git a/resources/sass/app.scss b/themes/default/sass/app.scss similarity index 100% rename from resources/sass/app.scss rename to themes/default/sass/app.scss diff --git a/themes/default/views/admin/activitylogs/index.blade.php b/themes/default/views/admin/activitylogs/index.blade.php new file mode 100644 index 00000000..e0eedc6f --- /dev/null +++ b/themes/default/views/admin/activitylogs/index.blade.php @@ -0,0 +1,129 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Activity Logs')}}

+
+ +
+
+
+ + + +
+
+ +
+
+ @if($cronlogs) +
+

{{$cronlogs}}

+
+ @else +
+

{{ __('No recent activity from cronjobs')}}

+

{{ __('Are cronjobs running?')}} {{ __('Check the docs for it here')}}

+
+ @endif + +
+
+ +
+
+
{{ __('Activity Logs')}}
+
+
+ +
+
+
+ @csrf +
+ +
+ +
+
+
+
+
+ + + + + + + + + + + @foreach($logs as $log) + + + + + + + @endforeach + +
{{ __('Causer') }}{{ __('Description') }}{{ __('Created at') }}
@if($log->causer) {{json_decode($log->causer)->name}} + @else + System + @endif + + @if(str_starts_with($log->description,"created")) + + @elseif(str_starts_with($log->description,"redeemed")) + + @elseif(str_starts_with($log->description,"deleted")) + + @elseif(str_starts_with($log->description,"gained")) + + @elseif(str_starts_with($log->description,"updated")) + + @endif + {{ explode("\\" , $log->subject_type)[2]}} + {{$log->description}} + + @php $first=true @endphp + @foreach(json_decode($log->properties, true) as $properties) + @if($first) + @if(isset($properties['name'])) + "{{$properties['name']}}" + @endif + @if(isset($properties['email'])) + < {{$properties['email']}} > + @endif + @php $first=false @endphp + @endif + @endforeach + + {{$log->created_at->diffForHumans()}}
+ +
+ {!! $logs->links() !!} +
+ +
+
+ + +
+ + +
+ + +@endsection diff --git a/themes/default/views/admin/api/create.blade.php b/themes/default/views/admin/api/create.blade.php new file mode 100644 index 00000000..e0025e85 --- /dev/null +++ b/themes/default/views/admin/api/create.blade.php @@ -0,0 +1,65 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Application API')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ @csrf + +
+ + + @error('memo') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+
+
+
+
+
+ +
+
+ + + + +@endsection diff --git a/themes/default/views/admin/api/edit.blade.php b/themes/default/views/admin/api/edit.blade.php new file mode 100644 index 00000000..f99e0b27 --- /dev/null +++ b/themes/default/views/admin/api/edit.blade.php @@ -0,0 +1,66 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Application API')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ @csrf + @method('PATCH') + +
+ + + @error('memo') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+
+
+
+
+
+ +
+
+ + + + +@endsection diff --git a/themes/default/views/admin/api/index.blade.php b/themes/default/views/admin/api/index.blade.php new file mode 100644 index 00000000..377095b1 --- /dev/null +++ b/themes/default/views/admin/api/index.blade.php @@ -0,0 +1,90 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Application API')}}

+
+ +
+
+
+ + + +
+
+ +
+ +
+
+
{{__('Application API')}}
+ {{__('Create new')}} +
+
+ +
+ + + + + + + + + + + + +
{{__('Token')}}{{__('Memo')}}{{__('Last used')}}
+ +
+
+ + +
+ +
+ + + + + + +@endsection diff --git a/themes/default/views/admin/nests/index.blade.php b/themes/default/views/admin/nests/index.blade.php new file mode 100644 index 00000000..152773e4 --- /dev/null +++ b/themes/default/views/admin/nests/index.blade.php @@ -0,0 +1,100 @@ + + + +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Nests')}}

+
+ +
+
+
+ + + +
+
+ +
+ +
+
+
{{__('Nests')}}
+ {{__('Sync')}} +
+
+ +
+ + + + + + + + + + + + + + + +
{{__('Active')}}{{__('ID')}}{{__('eggs')}}{{__('Name')}}{{__('Description')}}{{__('Created at')}}
+ +
+
+ + +
+ + +
+ + + + + + +@endsection diff --git a/themes/default/views/admin/nodes/index.blade.php b/themes/default/views/admin/nodes/index.blade.php new file mode 100644 index 00000000..bb57e0ce --- /dev/null +++ b/themes/default/views/admin/nodes/index.blade.php @@ -0,0 +1,100 @@ + + + +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Nodes')}}

+
+ +
+
+
+ + + +
+
+ +
+ +
+
+
{{__('Nodes')}}
+ {{__('Sync')}} +
+
+ +
+ + + + + + + + + + + + + + + +
{{__('Active')}}{{__('ID')}}{{__('Location')}}{{__('Name')}}{{__('Description')}}{{__('Created at')}}
+ +
+
+ + +
+ + +
+ + + + + + +@endsection diff --git a/themes/default/views/admin/overview/index.blade.php b/themes/default/views/admin/overview/index.blade.php new file mode 100644 index 00000000..7bf2664a --- /dev/null +++ b/themes/default/views/admin/overview/index.blade.php @@ -0,0 +1,406 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Admin Overview')}}

+
+ +
+
+
+ + + +
+
+ + + +
+
+
+ + +
+ {{__('Servers')}} + {{$counters['servers']->total}} +
+ +
+ +
+ +
+
+ + +
+ {{__('Users')}} + {{$counters['users']}} +
+ +
+ +
+ +
+
+ + +
+ {{__('Total')}} {{CREDITS_DISPLAY_NAME}} + {{$counters['credits']}} +
+ +
+ +
+ +
+
+ + +
+ {{__('Payments')}} + {{$counters['payments']->total}} +
+ +
+ +
+
+ +
+
+
+
+
+
+ {{__('Pterodactyl')}} +
+ {{__('Sync')}} +
+
+
+ @if ($deletedNodesPresent) +
+
{{ __('Warning!') }}
+

+ {{ __('Some nodes got deleted on pterodactyl only. Please click the sync button above.') }} +

+
+ @endif + + + + + + + + + + + + + + + + + + + + + + + + + +
{{__('Resources')}}{{__('Count')}}
{{__('Locations')}}{{$counters['locations']}}
{{__('Nodes')}}{{$nodes->count()}}
{{__('Nests')}}{{$counters['nests']}}
{{__('Eggs')}}{{$counters['eggs']}}
+
+ +
+
+
+
+
+ {{__('Latest tickets')}} +
+
+
+
+ @if(!$tickets->count()){{__('There are no tickets')}}. + @else + + + + + + + + + + + + @foreach($tickets as $ticket_id => $ticket) + + + + + + + @endforeach + + +
{{__('Title')}}{{__('User')}}{{__('Status')}}{{__('Last updated')}}
#{{$ticket_id}} - {{$ticket->title}}{{$ticket->user}}{{$ticket->status}}{{$ticket->last_updated}}
+ @endif +
+
+
+
+
+
+ {{__('Controlpanel.gg')}} +
+
+
+ +
+ +
+
+
+
+
+
+
+
+ {{__('Individual nodes')}} +
+
+
+
+ @if ($perPageLimit) +
+
{{ __('Error!') }}
+

+ {{ __('You reached the Pterodactyl perPage limit. Please make sure to set it higher than your server count.') }}
+ {{ __('You can do that in settings.') }}

+ {{ __('Note') }}: {{ __('If this error persists even after changing the limit, it might mean a server was deleted on Pterodactyl, but not on ControlPanel. Try clicking the button below.') }} +

+ {{__('Sync servers')}} +
+ @endif + + + + + + + + + + + + @foreach($nodes as $nodeID => $node) + + + + + + + + @endforeach + + + + + + + + + +
{{__('ID')}}{{__('Node')}}{{__('Server count')}}{{__('Resource usage')}}{{CREDITS_DISPLAY_NAME . ' ' . __('Usage')}}
{{$nodeID}}{{$node->name}}{{$node->activeServers}}/{{$node->totalServers}}{{$node->usagePercent}}%{{$node->activeEarnings}}/{{$node->totalEarnings}}
{{__('Total')}} ({{__('active')}}/{{__('total')}}):{{$counters['servers']->active}}/{{$counters['servers']->total}}{{$counters['totalUsagePercent']}}%{{$counters['earnings']->active}}/{{$counters['earnings']->total}}
+
+
+
+
+
+
+
+ {{__('Latest payments')}} +
+
+
+
+
+ @if($counters['payments']['lastMonth']->count()) +
+ {{__('Last month')}}: + + + + + + + + + + + + @foreach($counters['payments']['lastMonth'] as $currency => $income) + + + + + + @endforeach + +
{{__('Currency')}}{{__('Number of payments')}}{{__('Total amount')}}
{{$currency}}{{$income->count}}{{$income->total}}
+
+
+ @endif + @if($counters['payments']['lastMonth']->count())
+ @else
@endif + {{__('This month')}}: + + + + + + + + + + + + @foreach($counters['payments']['thisMonth'] as $currency => $income) + + + + + + @endforeach + +
{{__('Currency')}}{{__('Number of payments')}}{{__('Total amount')}}
{{$currency}}{{$income->count}}{{$income->total}}
+
+
+
+ +
+
+
+
+
+
+ {{__('Tax overview')}} +
+
+
+
+ @if($counters['taxPayments']['lastYear']->count()) + {{__('Last year')}}: + + + + + + + + + + + + + + @foreach($counters['taxPayments']['lastYear'] as $currency => $income) + + + + + + + + @endforeach + +
{{__('Currency')}}{{__('Number of payments')}}{{__('Base amount')}}{{__('Total taxes')}}{{__('Total amount')}}
{{$currency}}{{$income->count}}{{$income->price}}{{$income->taxes}}{{$income->total}}
+
+ @endif + {{__('This year')}}: + + + + + + + + + + + + + + @foreach($counters['taxPayments']['thisYear'] as $currency => $income) + + + + + + + + @endforeach + +
{{__('Currency')}}{{__('Number of payments')}}{{__('Base amount')}}{{__('Total taxes')}}{{__('Total amount')}}
{{$currency}}{{$income->count}}{{$income->price}}{{$income->taxes}}{{$income->total}}
+
+
+
+
+
+ +
+ + +
+ +@endsection diff --git a/themes/default/views/admin/partners/create.blade.php b/themes/default/views/admin/partners/create.blade.php new file mode 100644 index 00000000..c2a56427 --- /dev/null +++ b/themes/default/views/admin/partners/create.blade.php @@ -0,0 +1,147 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Vouchers')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ {{__('Partner details')}} +
+
+
+
+ @csrf + +
+ + + @error('user') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('partner_discount') +
+ {{$message}} +
+ @enderror +
+ + +
+ +
+ +
+ @error('registered_user_discount') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('referral_system_commission') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+
+
+
+
+
+ + + +
+
+ + + + + + +@endsection \ No newline at end of file diff --git a/themes/default/views/admin/partners/edit.blade.php b/themes/default/views/admin/partners/edit.blade.php new file mode 100644 index 00000000..289edf5b --- /dev/null +++ b/themes/default/views/admin/partners/edit.blade.php @@ -0,0 +1,166 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Partners')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ {{__('Partner details')}} +
+
+
+
+ @csrf + @method('PATCH') + +
+ + + @error('user') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('partner_discount') +
+ {{$message}} +
+ @enderror +
+ + +
+ +
+ +
+ @error('registered_user_discount') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('referral_system_commission') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+
+
+
+
+
+ +
+
+ + + + + + +@endsection \ No newline at end of file diff --git a/themes/default/views/admin/partners/index.blade.php b/themes/default/views/admin/partners/index.blade.php new file mode 100644 index 00000000..59369b01 --- /dev/null +++ b/themes/default/views/admin/partners/index.blade.php @@ -0,0 +1,94 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Partners')}}

+
+ +
+
+
+ + + +
+
+ +
+ +
+
+
{{__('Partners')}}
+ {{__('Create new')}} +
+
+ +
+ + + + + + + + + + + + + + +
{{__('User')}}{{__('Partner discount')}}{{__('Registered user discount')}}{{__('Referral system commission')}}{{__('Created')}}{{__('Actions')}}
+ +
+
+ + +
+ + +
+ + + + + + +@endsection \ No newline at end of file diff --git a/themes/default/views/admin/payments/index.blade.php b/themes/default/views/admin/payments/index.blade.php new file mode 100644 index 00000000..5e1096ae --- /dev/null +++ b/themes/default/views/admin/payments/index.blade.php @@ -0,0 +1,98 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Payments')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
{{ __('Payments') }}
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
{{ __('ID') }}{{ __('Type') }}{{ __('User') }}{{ __('Amount') }}{{ __('Product Price') }}{{ __('Tax Value') }}{{ __('Tax Percentage') }}{{ __('Total Price') }}{{ __('Payment ID') }}{{ __('Payment Method') }}{{ __('Created at') }}
+
+ +
+
+ + +
+ + + + +@endsection diff --git a/themes/default/views/admin/products/create.blade.php b/themes/default/views/admin/products/create.blade.php new file mode 100644 index 00000000..c6d72f68 --- /dev/null +++ b/themes/default/views/admin/products/create.blade.php @@ -0,0 +1,315 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Products')}}

+
+ +
+
+
+ + + +
+
+
+ @csrf +
+
+
+
+
{{__('Product Details')}}
+
+
+ +
+
+ + +
+
+ +
+
+
+ + + @error('name') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('price') +
+ {{ $message }} +
+ @enderror +
+ + +
+ + + @error('memory') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('cpu') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('swap') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('description') +
+ {{ $message }} +
+ @enderror +
+ +
+
+
+ + + @error('disk') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('minimum_credits') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('io') +
+ {{ $message }} +
+ @enderror +
+
+ + + @error('databases') +
+ {{ $message }} +
+ @enderror +
+
+ + + @error('backups') +
+ {{ $message }} +
+ @enderror +
+
+ + + @error('allocations') +
+ {{ $message }} +
+ @enderror +
+
+
+ +
+ +
+ +
+
+
+ +
+
+
+
{{__('Product Linking')}} +
+
+
+ +
+ + + @error('nodes') +
+ {{$message}} +
+ @enderror +
+ {{__('This product will only be available for these nodes')}} +
+
+ + +
+ + + @error('eggs') +
+ {{$message}} +
+ @enderror +
+ {{__('This product will only be available for these eggs')}} +
+
+
+ {{__('No Eggs or Nodes shown?')}} {{__("Sync now")}} +
+
+
+
+ +
+
+ +
+
+ + + +@endsection diff --git a/themes/default/views/admin/products/edit.blade.php b/themes/default/views/admin/products/edit.blade.php new file mode 100644 index 00000000..61357c71 --- /dev/null +++ b/themes/default/views/admin/products/edit.blade.php @@ -0,0 +1,310 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Products')}}

+
+ +
+
+
+ + + +
+
+
+ @csrf + @method('PATCH') + +
+
+ + @if($product->servers()->count() > 0) +
+

{{__('Editing the resource options will not automatically update the servers on + pterodactyls side!')}}'

+

{{__('Automatically updating resource options on pterodactyl side is on + my todo list :)')}}

+
+ @endif + +
+
+
{{__('Product Details')}}
+
+
+ +
+
+ disabled) checked @endif name="disabled" + class="custom-control-input custom-control-input-danger" id="switch1"> + +
+
+ +
+
+ +
+ + + @error('name') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('price') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('memory') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('cpu') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('swap') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('description') +
+ {{ $message }} +
+ @enderror +
+ +
+
+
+ + + @error('disk') +
+ {{ $message }} +
+ @enderror +
+
+ + + @error('minimum_credits') +
+ {{ $message }} +
+ @enderror +
+
+ + + @error('io') +
+ {{ $message }} +
+ @enderror +
+
+ + + @error('databases') +
+ {{ $message }} +
+ @enderror +
+
+ + + @error('backups') +
+ {{ $message }} +
+ @enderror +
+
+ + + @error('allocations') +
+ {{ $message }} +
+ @enderror +
+
+
+ +
+ +
+ +
+
+
+ +
+
+
+
{{__('Product Linking')}} +
+
+
+ +
+ + + @error('nodes') +
+ {{$message}} +
+ @enderror +
+ {{__('This product will only be available for these nodes')}} +
+
+ +
+ + + @error('eggs') +
+ {{$message}} +
+ @enderror +
+ {{__('This product will only be available for these eggs')}} +
+
+ +
+
+
+ +
+
+
+
+ + + + + +@endsection diff --git a/themes/default/views/admin/products/index.blade.php b/themes/default/views/admin/products/index.blade.php new file mode 100644 index 00000000..bc15a70b --- /dev/null +++ b/themes/default/views/admin/products/index.blade.php @@ -0,0 +1,117 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Products')}}

+
+ +
+
+
+ + + +
+
+ +
+ +
+
+ +
{{__('Products')}}
+ {{__('Create new')}} +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
{{__('Active')}}{{__('Name')}}{{__('Price')}}{{__('Memory')}}{{__('Cpu')}}{{__('Swap')}}{{__('Disk')}}{{__('Databases')}}{{__('Backups')}}{{__('Nodes')}}{{__('Eggs')}}{{__('Min Credits')}}{{__('Servers')}}{{__('Created at')}}
+ +
+
+ + +
+ + +
+ + + + + + +@endsection diff --git a/themes/default/views/admin/products/show.blade.php b/themes/default/views/admin/products/show.blade.php new file mode 100644 index 00000000..daf9a6ab --- /dev/null +++ b/themes/default/views/admin/products/show.blade.php @@ -0,0 +1,261 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Products')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
{{__('Product')}}
+
+ +
+ {{ csrf_field() }} + {{ method_field('DELETE') }} + +
+
+
+
+
+ +
+
+
+ +
+
+ + {{ $product->id }} + +
+
+
+ +
+
+
+ +
+
+ + {{ $product->name }} + +
+
+
+ +
+
+
+ +
+
+ + {{ $product->price }} + +
+
+
+ +
+
+
+ +
+
+ + @if ($product->minimum_credits == -1) + {{ $minimum_credits }} + @else + {{ $product->minimum_credits }} + @endif + +
+
+
+ + +
+
+
+ +
+
+ + {{ $product->memory }} + +
+
+
+ +
+
+
+ +
+
+ + {{ $product->cpu }} + +
+
+
+ +
+
+
+ +
+
+ + {{ $product->swap }} + +
+
+
+ +
+
+
+ +
+
+ + {{ $product->disk }} + +
+
+
+ +
+
+
+ +
+
+ + {{ $product->io }} + +
+
+
+ +
+
+
+ +
+
+ + {{ $product->databases }} + +
+
+
+ +
+
+
+ +
+
+ + {{ $product->allocations }} + +
+
+
+ +
+
+
+ +
+
+ + {{ $product->created_at ? $product->created_at->diffForHumans() : '' }} + +
+
+
+ + +
+
+
+ +
+
+ + {{ $product->description }} + +
+
+
+ + +
+
+
+ +
+
+ + {{ $product->updated_at ? $product->updated_at->diffForHumans() : '' }} + +
+
+
+ +
+
+
+ +
+
+
{{__('Servers')}}
+
+
+ + @include('admin.servers.table' , ['filter' => '?product=' . $product->id]) + +
+
+ + +
+ + +
+ + + + +@endsection diff --git a/themes/default/views/admin/servers/edit.blade.php b/themes/default/views/admin/servers/edit.blade.php new file mode 100644 index 00000000..86d51f47 --- /dev/null +++ b/themes/default/views/admin/servers/edit.blade.php @@ -0,0 +1,67 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
{{ __('ATTENTION!') }}
+ {{ __('Only edit these settings if you know exactly what you are doing ')}} +
+ {{ __('You usually do not need to change anything here') }} +
+
+
+ +

{{__('Edit Server')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ @csrf + @method('PATCH') +
+ + + @error('identifier') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+
+
+
+ +
+
+ + +
+ + +@endsection diff --git a/themes/default/views/admin/servers/index.blade.php b/themes/default/views/admin/servers/index.blade.php new file mode 100644 index 00000000..916eedd3 --- /dev/null +++ b/themes/default/views/admin/servers/index.blade.php @@ -0,0 +1,53 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Servers')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+ {{__('Servers')}} +
+ {{__('Sync')}} +
+
+
+ + @include('admin.servers.table') + +{{--
--}} +{{-- {!! $servers->links() !!}--}} +{{--
--}} + +
+
+ + +
+ + +
+ +@endsection diff --git a/themes/default/views/admin/servers/table.blade.php b/themes/default/views/admin/servers/table.blade.php new file mode 100644 index 00000000..b71671de --- /dev/null +++ b/themes/default/views/admin/servers/table.blade.php @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + +
{{__('Name')}}{{__('User')}}{{__('Server id')}}{{__('Config')}}{{__('Suspended at')}}{{__('Created at')}}
+ + diff --git a/themes/default/views/admin/settings/index.blade.php b/themes/default/views/admin/settings/index.blade.php new file mode 100644 index 00000000..624f80b9 --- /dev/null +++ b/themes/default/views/admin/settings/index.blade.php @@ -0,0 +1,98 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Settings') }}

+
+ +
+
+
+ + @if(!file_exists(base_path()."/install.lock")) +
+

{{ __('The installer is not locked!') }}

+

{{ __('please create a file called "install.lock" in your dashboard Root directory. Otherwise no settings will be loaded!') }}

+ + +
+ @endif + +
+
+
+ +
+
+
{{ __('Settings') }}
+
+
+ +
+ + + + + +
+ + @foreach ($tabs as $tab) + @include($tab) + @endforeach +
+ + + + +
+
+ +
+ + + + + +
+ + + + + +@endsection diff --git a/themes/default/views/admin/settings/tabs/invoices.blade.php b/themes/default/views/admin/settings/tabs/invoices.blade.php new file mode 100644 index 00000000..27faef7c --- /dev/null +++ b/themes/default/views/admin/settings/tabs/invoices.blade.php @@ -0,0 +1,111 @@ +
+
+ @csrf + @method('PATCH') + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+ +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+ + +
+
+
+ +
+
+ +
+ + +
+
+ @error('logo') + + + @enderror +
+
+
+ +
+ +
+
+
diff --git a/themes/default/views/admin/settings/tabs/language.blade.php b/themes/default/views/admin/settings/tabs/language.blade.php new file mode 100644 index 00000000..9f474801 --- /dev/null +++ b/themes/default/views/admin/settings/tabs/language.blade.php @@ -0,0 +1,91 @@ +
+
+ @csrf + @method('PATCH') + +
+
+
+ +
+ + +
+ + + +
+ + + +
+ +
+ + + +
+
+
+ + +
+ + +
+ + + +
+ + + + + +
+
+
+
+ +
+
+
+ + diff --git a/themes/default/views/admin/settings/tabs/misc.blade.php b/themes/default/views/admin/settings/tabs/misc.blade.php new file mode 100644 index 00000000..4515917e --- /dev/null +++ b/themes/default/views/admin/settings/tabs/misc.blade.php @@ -0,0 +1,308 @@ +
+
+ @csrf + @method('PATCH') + +
+ + {{-- E-Mail --}} +
+
+
+

E-Mail

+
+
+ +
+ + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+

Discord

+
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+
+
+

ReCaptcha

+
+
+ +
+
+
+ + +
+
+
+ +
+
+ + + @error('recaptcha-site-key') +
+ {{$message}} +
+ @enderror +
+
+ +
+
+ + + @error('recaptcha-secret-key') +
+ {{$message}} +
+ @enderror +
+
+ @if(config('SETTINGS::RECAPTCHA:ENABLED') == 'true') +
+
+ + {!! htmlScriptTagJsApi() !!} + {!! htmlFormSnippet() !!} +
+
+ @endif + +
+
+
+
+

{{__("Referral System")}}

+
+
+ +
+
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ +
+ + +
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+

Ticket System

+
+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+
+
diff --git a/themes/default/views/admin/settings/tabs/payment.blade.php b/themes/default/views/admin/settings/tabs/payment.blade.php new file mode 100644 index 00000000..f5f0f8cf --- /dev/null +++ b/themes/default/views/admin/settings/tabs/payment.blade.php @@ -0,0 +1,144 @@ +
+
+ @csrf + @method('PATCH') + +
+ {{-- PayPal --}} +
+
+
+

PayPal

+
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + ({{ __('optional') }}) + +
+
+ +
+
+ + ({{ __('optional') }}) + +
+
+
+ + {{-- Stripe --}} +
+ +
+
+

Stripe

+
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+ + ({{ __('optional') }}) + +
+
+ +
+
+ + ({{ __('optional') }}) + +
+
+
+
+
+ + +
+ +
+
+
+ + {{-- Other --}} +
+
+
+

Other

+
+
+ +
+
+
+ + +
+ +
+
+
+
+
+ +
+
+
diff --git a/resources/views/admin/settings/tabs/system.blade.php b/themes/default/views/admin/settings/tabs/system.blade.php similarity index 97% rename from resources/views/admin/settings/tabs/system.blade.php rename to themes/default/views/admin/settings/tabs/system.blade.php index d153a893..ad851564 100644 --- a/resources/views/admin/settings/tabs/system.blade.php +++ b/themes/default/views/admin/settings/tabs/system.blade.php @@ -349,6 +349,15 @@

{{ __('Design') }}

+
+ + +
diff --git a/themes/default/views/admin/store/create.blade.php b/themes/default/views/admin/store/create.blade.php new file mode 100644 index 00000000..c7c17ed7 --- /dev/null +++ b/themes/default/views/admin/store/create.blade.php @@ -0,0 +1,167 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Store')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ @csrf +
+
+ + +
+
+ +
+ + + @error('name') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('currency_code') +
+ {{$message}} +
+ @enderror +
+ {{__('Checkout the paypal docs to select the appropriate code')}} link +
+
+ +
+ + + @error('price') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('quantity') +
+ {{$message}} +
+ @enderror +
+ {{__('Amount given to the user after purchasing')}} +
+
+ +
+ + + @error('display') +
+ {{$message}} +
+ @enderror +
+ {{__('This is what the user sees at store and checkout')}} +
+
+ +
+ + + @error('description') +
+ {{$message}} +
+ @enderror +
+ {{__('This is what the user sees at checkout')}} +
+
+ + +
+ +
+
+
+
+
+
+ +
+
+ + + + +@endsection diff --git a/themes/default/views/admin/store/edit.blade.php b/themes/default/views/admin/store/edit.blade.php new file mode 100644 index 00000000..90590c45 --- /dev/null +++ b/themes/default/views/admin/store/edit.blade.php @@ -0,0 +1,157 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Store') }}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ @csrf + @method('PATCH') +
+
+ disabled) checked @endif name="disabled" + class="custom-control-input custom-control-input-danger" id="switch1"> + +
+
+ +
+ + + @error('name') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('currency_code') +
+ {{ $message }} +
+ @enderror +
+ {{ __('Checkout the paypal docs to select the appropriate code') }} link +
+
+ +
+ + + @error('price') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + @error('quantity') +
+ {{ $message }} +
+ @enderror +
+ {{ __('Amount given to the user after purchasing') }} +
+
+ +
+ + + @error('display') +
+ {{ $message }} +
+ @enderror +
+ {{ __('This is what the user sees at store and checkout') }} +
+
+ +
+ + + @error('description') +
+ {{ $message }} +
+ @enderror +
+ {{ __('This is what the user sees at checkout') }} +
+
+ + +
+ +
+
+
+
+
+
+ +
+
+ + + + +@endsection diff --git a/themes/default/views/admin/store/index.blade.php b/themes/default/views/admin/store/index.blade.php new file mode 100644 index 00000000..161b911e --- /dev/null +++ b/themes/default/views/admin/store/index.blade.php @@ -0,0 +1,127 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Store') }}

+
+ +
+
+
+ + + +
+
+ +
+
+ @if ($isPaymentSetup == false) +
+

{{ __('No payment method is configured.') }}

+

{{ __('To configure the payment methods, head to the settings-page and add the required options for your prefered payment method.') }} +

+
+ @endif + +
+
+ +
+ +
+
+
{{ __('Store') }}
+ {{ __('Create new') }} +
+
+ +
+ + + + + + + + + + + + + + + +
{{ __('Active') }}{{ __('Type') }}{{ __('Price') }}{{ __('Display') }}{{ __('Description') }}{{ __('Created at') }}
+ +
+
+ + +
+ + +
+ + + + + + +@endsection diff --git a/themes/default/views/admin/usefullinks/create.blade.php b/themes/default/views/admin/usefullinks/create.blade.php new file mode 100644 index 00000000..53f68509 --- /dev/null +++ b/themes/default/views/admin/usefullinks/create.blade.php @@ -0,0 +1,132 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Useful Links')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ @csrf + + +
+ + +
+ {{__('You can find available free icons')}} here +
+ @error('icon') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('title') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('link') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('description') +
+ {{$message}} +
+ @enderror +
+ + +
+ +
+
+
+
+
+
+ +
+
+ + + +@endsection diff --git a/themes/default/views/admin/usefullinks/edit.blade.php b/themes/default/views/admin/usefullinks/edit.blade.php new file mode 100644 index 00000000..bea44a5b --- /dev/null +++ b/themes/default/views/admin/usefullinks/edit.blade.php @@ -0,0 +1,134 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Useful Links')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ @csrf + @method('PATCH') + + +
+ + +
+ {{__('You can find available free icons')}} here +
+ @error('icon') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('title') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('link') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('description') +
+ {{$message}} +
+ @enderror +
+ + +
+ +
+
+
+
+
+
+ +
+
+ + + + +@endsection diff --git a/themes/default/views/admin/usefullinks/index.blade.php b/themes/default/views/admin/usefullinks/index.blade.php new file mode 100644 index 00000000..32100334 --- /dev/null +++ b/themes/default/views/admin/usefullinks/index.blade.php @@ -0,0 +1,94 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Useful Links')}}

+
+ +
+
+ + + +
+
+ +
+ +
+
+
{{__('Useful Links')}}
+ {{__('Create new')}} +
+
+ +
+ + + + + + + + + + + + + +
{{__('description')}}{{__('Icon')}}{{__('Title')}}{{__('Link')}}{{__('Created at')}}
+ +
+
+ + +
+ + +
+ + + + + + +@endsection diff --git a/themes/default/views/admin/users/edit.blade.php b/themes/default/views/admin/users/edit.blade.php new file mode 100644 index 00000000..ad938f67 --- /dev/null +++ b/themes/default/views/admin/users/edit.blade.php @@ -0,0 +1,185 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Users')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ @csrf + @method('PATCH') +
+ + + @error('name') +
+ {{$message}} +
+ @enderror +
+
+ + + @error('email') +
+ {{$message}} +
+ @enderror +
+
+ + + @error('pterodactyl_id') +
+ {{$message}} +
+ @enderror +
+ {{__('This ID refers to the user account created on pterodactyls panel.')}}
+ {{__('Only edit this if you know what youre doing :)')}} +
+
+
+ + + @error('credits') +
+ {{$message}} +
+ @enderror +
+
+ + + @error('server_limit') +
+ {{$message}} +
+ @enderror +
+
+ +
+ +
+
+
+ + + @error('referral_code') +
+ {{$message}} +
+ @enderror +
+ @error('role') +
+ {{$message}} +
+ @enderror + +
+ +
+
+
+
+
+
+
+
+
+ + @error('new_password') +
+ {{$message}} +
+ @enderror +
+
+
+
+ + + @error('new_password_confirmation') +
+ {{$message}} +
+ @enderror +
+
+ +
+
+
+
+
+ + +
+ + + + +@endsection diff --git a/themes/default/views/admin/users/index.blade.php b/themes/default/views/admin/users/index.blade.php new file mode 100644 index 00000000..530f47de --- /dev/null +++ b/themes/default/views/admin/users/index.blade.php @@ -0,0 +1,108 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Users')}}

+
+ +
+
+
+ + + +
+
+ +
+ +
+
+
{{__('Users')}}
+ {{__('Notify')}} +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
discordIdippterodactyl_id{{__('Avatar')}}{{__('Name')}}{{__('Role')}}{{__('Email')}}{{CREDITS_DISPLAY_NAME}}{{__('Servers')}}{{__("Referrals")}}{{__('Verified')}}{{__('Last seen')}}
+ +
+
+ + +
+ +
+ + + + + + +@endsection diff --git a/themes/default/views/admin/users/notifications.blade.php b/themes/default/views/admin/users/notifications.blade.php new file mode 100644 index 00000000..53a87f19 --- /dev/null +++ b/themes/default/views/admin/users/notifications.blade.php @@ -0,0 +1,188 @@ +@extends('layouts.main') +@section('content') + +
+
+
+
+

{{__('Users')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ @csrf + @method('POST') + +
+
+ + +
+ +
+ @error('all') +
+ {{$message}} +
+ @enderror + @error('users') +
+ {{$message}} +
+ @enderror +
+ +
+
+ + +
+ + + @error('via') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('title') +
+ {{$message}} +
+ @enderror +
+
+ + + @error('content') +
+ {{$message}} +
+ @enderror +
+
+ +
+
+
+
+
+
+
+ + +
+ + + + +@endsection diff --git a/themes/default/views/admin/users/show.blade.php b/themes/default/views/admin/users/show.blade.php new file mode 100644 index 00000000..c9cf9b7c --- /dev/null +++ b/themes/default/views/admin/users/show.blade.php @@ -0,0 +1,293 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Users')}}

+
+ +
+
+
+ + + +
+
+ + @if($user->discordUser) +
+
+
+
+
+

{{$user->discordUser->username}} {{$user->discordUser->locale}}

+

{{$user->discordUser->id}} +

+
+
avatar
+
+ +
+ +
+
+ @endif + +
+
+
{{__('Users')}}
+
+
+
+ +
+
+
+ +
+
+ + {{$user->id}} + +
+
+
+ +
+
+
+ +
+
+ + {{$user->role}} + +
+
+
+ +
+
+
+ +
+
+ + {{$user->pterodactyl_id}} + +
+
+
+ +
+
+
+ +
+
+ + {{$user->email}} + +
+
+
+ + +
+
+
+ +
+
+ + {{$user->Servers()->count()}} / {{$user->server_limit}} + +
+
+
+ +
+
+
+ +
+
+ + {{$user->name}} + +
+
+
+ +
+
+
+ +
+
+ + {{$user->email_verified_at ? 'True' : 'False'}} + +
+
+
+ +
+
+
+ +
+
+ + {{$user->Credits()}} + +
+
+
+ +
+
+
+ +
+
+ + {{$user->discordUser ? 'True' : 'False'}} + +
+
+
+ +
+
+
+ +
+
+ + {{$user->CreditUsage()}} + +
+
+
+ + +
+
+
+ +
+
+ + {{$user->ip}} + +
+
+
+ +
+
+
+ +
+
+ + {{$user->created_at->diffForHumans()}} + +
+
+
+ +
+
+ +
+
+
+ +
+
+ + @if($user->last_seen) + {{$user->last_seen->diffForHumans()}} + @else + Null + @endif + +
+
+
+ + +
+ +
+
+ +
+
+
{{__('Servers')}}
+
+
+ + @include('admin.servers.table' , ['filter' => '?user=' . $user->id]) + +
+ +
+
+
+
{{__('Referals')}} + ({{__("referral-code")}}: {{$user->referral_code}})
+
+
+ + + @foreach($referrals as $referral) +
+
+
+ +
+ +
+ + {{$referral->created_at->diffForHumans()}} + +
+
+
+ @endforeach +
+ +
+ +
+ +
+ + + +@endsection diff --git a/themes/default/views/admin/vouchers/create.blade.php b/themes/default/views/admin/vouchers/create.blade.php new file mode 100644 index 00000000..4f28e191 --- /dev/null +++ b/themes/default/views/admin/vouchers/create.blade.php @@ -0,0 +1,192 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Vouchers')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ {{__('Voucher details')}} +
+
+
+
+ @csrf + +
+ + + @error('memo') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('credits') +
+ {{$message}} +
+ @enderror +
+ + +
+ +
+ +
+ +
+
+ @error('code') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+ +
+ +
+
+ @error('uses') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+ +
+
+
+
+ @error('expires_at') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+
+
+
+
+
+ + + +
+
+ + + + + + +@endsection diff --git a/themes/default/views/admin/vouchers/edit.blade.php b/themes/default/views/admin/vouchers/edit.blade.php new file mode 100644 index 00000000..11c7c5e3 --- /dev/null +++ b/themes/default/views/admin/vouchers/edit.blade.php @@ -0,0 +1,193 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Vouchers')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ {{__('Voucher details')}} +
+
+
+
+ @csrf + @method('PATCH') + +
+ + + @error('memo') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('credits') +
+ {{$message}} +
+ @enderror +
+ + +
+ +
+ +
+ +
+
+ @error('code') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+ +
+ +
+
+ @error('uses') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+ +
+
+
+
+ @error('expires_at') +
+ {{$message}} +
+ @enderror +
+ + +
+ +
+
+
+
+
+
+ +
+
+ + + + + + +@endsection diff --git a/themes/default/views/admin/vouchers/index.blade.php b/themes/default/views/admin/vouchers/index.blade.php new file mode 100644 index 00000000..1f60e9aa --- /dev/null +++ b/themes/default/views/admin/vouchers/index.blade.php @@ -0,0 +1,97 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Vouchers')}}

+
+ +
+
+
+ + + +
+
+ +
+ +
+
+
{{__('Vouchers')}}
+ {{__('Create new')}} +
+
+ +
+ + + + + + + + + + + + + + + +
{{__('Status')}}{{__('Code')}}{{__('Memo')}}{{CREDITS_DISPLAY_NAME}}{{__('Used / Uses')}}{{__('Expires')}}
+ +
+
+ + +
+ + +
+ + + + + + +@endsection diff --git a/themes/default/views/admin/vouchers/users.blade.php b/themes/default/views/admin/vouchers/users.blade.php new file mode 100644 index 00000000..284dc1c3 --- /dev/null +++ b/themes/default/views/admin/vouchers/users.blade.php @@ -0,0 +1,96 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Vouchers')}}

+
+ +
+
+
+ + + +
+
+ +
+ +
+
+
{{__('Users')}}
+
+
+ +
+ + + + + + + + + + + + + +
{{__('ID')}}{{__('Name')}}{{__('Email')}}{{ CREDITS_DISPLAY_NAME }}{{__('Last seen')}}
+ +
+
+ + +
+ + +
+ + + + + + +@endsection diff --git a/themes/default/views/auth/login.blade.php b/themes/default/views/auth/login.blade.php new file mode 100644 index 00000000..06438326 --- /dev/null +++ b/themes/default/views/auth/login.blade.php @@ -0,0 +1,140 @@ +@extends('layouts.app') + +@section('content') + + +
+ +
+
+ {{ config('app.name', 'Laravel') }} + @if (config('SETTINGS::SYSTEM:ENABLE_LOGIN_LOGO')) + {{ config('app.name', 'Controlpanel.gg') }} Logo + @endif +
+
+ + + @if (session('message')) +
{{ session('message') }}
+ @endif + +
+ @csrf + @if (Session::has('error')) + + {{ Session::get('error') }} + + @endif + +
+
+ +
+
+ +
+
+ +
+ @error('email') + + {{ $message }} + + @enderror +
+ +
+
+ +
+
+ +
+
+ +
+ @error('password') + + {{ $message }} + + @enderror +
+ @if (config('SETTINGS::RECAPTCHA:ENABLED') == 'true') +
+ {!! htmlFormSnippet() !!} + @error('g-recaptcha-response') + + {{ $message }} + + @enderror +
+ @endif + +
+
+
+ + +
+
+ +
+ +
+ +
+
+ + {{-- --}} + + +

+ @if (Route::has('password.request')) + + {{ __('Forgot Your Password?') }} + + @endif +

+

+ {{ __('Register a new membership') }} +

+
+ +
+ +
+ + + {{-- imprint and privacy policy --}} +
+
+ @if (config('SETTINGS::SYSTEM:SHOW_IMPRINT')) + {{ __('Imprint') }} | + @endif + @if (config('SETTINGS::SYSTEM:SHOW_PRIVACY')) + {{ __('Privacy') }} + @endif + @if (config('SETTINGS::SYSTEM:SHOW_TOS')) + | {{ __('Terms of Service') }} + @endif +
+
+ +@endsection diff --git a/themes/default/views/auth/passwords/confirm.blade.php b/themes/default/views/auth/passwords/confirm.blade.php new file mode 100644 index 00000000..ca78fc1d --- /dev/null +++ b/themes/default/views/auth/passwords/confirm.blade.php @@ -0,0 +1,49 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Confirm Password') }}
+ +
+ {{ __('Please confirm your password before continuing.') }} + +
+ @csrf + +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+
+ + + @if (Route::has('password.request')) + + {{ __('Forgot Your Password?') }} + + @endif +
+
+
+
+
+
+
+
+@endsection diff --git a/themes/default/views/auth/passwords/email.blade.php b/themes/default/views/auth/passwords/email.blade.php new file mode 100644 index 00000000..916ed0c5 --- /dev/null +++ b/themes/default/views/auth/passwords/email.blade.php @@ -0,0 +1,82 @@ +@extends('layouts.app') + +@section('content') + + +
+
+ +
+ @if (session('status')) + + @endif + +
+ @csrf + +
+ +
+
+ +
+
+ + @error('email') + + {{ $message }} + + @enderror +
+ + @if (config('SETTINGS::RECAPTCHA:ENABLED') == 'true') +
+ {!! htmlFormSnippet() !!} + @error('g-recaptcha-response') + + {{ $message }} + + @enderror +
+ @endif + +
+
+ +
+ + +
+ +
+

+ {{ __('Login') }} +

+
+ +
+
+ + + {{-- imprint and privacy policy --}} +
+
+ @if (config('SETTINGS::SYSTEM:SHOW_IMPRINT')) + {{ __('Imprint') }} | + @endif + @if (config('SETTINGS::SYSTEM:SHOW_PRIVACY')) + {{ __('Privacy') }} + @endif +
+
+ +@endsection diff --git a/themes/default/views/auth/passwords/reset.blade.php b/themes/default/views/auth/passwords/reset.blade.php new file mode 100644 index 00000000..458b169d --- /dev/null +++ b/themes/default/views/auth/passwords/reset.blade.php @@ -0,0 +1,93 @@ +@extends('layouts.app') + +@section('content') + + +
+
+ +
+ + +
+ @csrf + + + +
+ +
+
+ +
+
+ @error('email') + + {{ $message }} + + @enderror +
+ + +
+ +
+
+ +
+
+ @error('password') + + {{ $message }} + + @enderror +
+ +
+ +
+
+ +
+
+
+ + +
+
+ +
+ +
+
+ +

+ Login +

+
+ +
+
+ + + {{-- imprint and privacy policy --}} +
+
+ @if (config('SETTINGS::SYSTEM:SHOW_IMPRINT')) + {{ __('Imprint') }} | + @endif + @if (config('SETTINGS::SYSTEM:SHOW_PRIVACY')) + {{ __('Privacy') }} + @endif +
+
+ +@endsection diff --git a/themes/default/views/auth/register.blade.php b/themes/default/views/auth/register.blade.php new file mode 100644 index 00000000..02ee833c --- /dev/null +++ b/themes/default/views/auth/register.blade.php @@ -0,0 +1,195 @@ +@extends('layouts.app') + +@section('content') + + +
+
+ +
+ @if (!config('SETTINGS::SYSTEM:CREATION_OF_NEW_USERS')) +
+
{{ __('Warning!') }}
+ {{ __('The system administrator has blocked the registration of new users') }} +
+ + @else + + +
+ + @error('ip') + + {{ $message }} + + @enderror + + @error('registered') + + {{ $message }} + + @enderror + @if ($errors->has('ptero_registration_error')) + @foreach ($errors->get('ptero_registration_error') as $err) + + {{ $err }} + + @endforeach + @endif + + @csrf +
+
+ +
+
+ +
+
+
+ @error('name') + + {{ $message }} + + @enderror +
+ + +
+
+ +
+
+ +
+
+
+ @error('email') + + {{ $message }} + + @enderror +
+ +
+
+ +
+
+ +
+
+
+ @error('password') + + {{ $message }} + + @enderror +
+ +
+ +
+
+ +
+
+
+ @if (config('SETTINGS::REFERRAL::ENABLED') == 'true') +
+ +
+
+ +
+
+
+ @endif + @if (config('SETTINGS::RECAPTCHA:ENABLED') == 'true') +
+ {!! htmlFormSnippet() !!} + @error('g-recaptcha-response') + + {{ $message }} + + @enderror +
+ @endif + +
+
+ @if (config('SETTINGS::SYSTEM:SHOW_TOS')) + +
+ + +
+ @error('terms') + + {{ $message }} + + @enderror + + @endif +
+
+ +
+ +
+ +
+ + + {{-- --}} + + {{ __('I already have a membership') }} +
+ +
+ + + + {{-- imprint and privacy policy --}} +
+
+ @if (config('SETTINGS::SYSTEM:SHOW_IMPRINT')) + {{ __('Imprint') }} | + @endif + @if (config('SETTINGS::SYSTEM:SHOW_PRIVACY')) + {{ __('Privacy') }} + @endif + @if (config('SETTINGS::SYSTEM:SHOW_TOS')) + | {{ __('Terms of Service') }} + @endif +
+
+ + @endif +@endsection diff --git a/themes/default/views/auth/verify.blade.php b/themes/default/views/auth/verify.blade.php new file mode 100644 index 00000000..9f8c1bc0 --- /dev/null +++ b/themes/default/views/auth/verify.blade.php @@ -0,0 +1,28 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Verify Your Email Address') }}
+ +
+ @if (session('resent')) + + @endif + + {{ __('Before proceeding, please check your email for a verification link.') }} + {{ __('If you did not receive the email') }}, +
+ @csrf + . +
+
+
+
+
+
+@endsection diff --git a/themes/default/views/home.blade.php b/themes/default/views/home.blade.php new file mode 100644 index 00000000..fabf81f8 --- /dev/null +++ b/themes/default/views/home.blade.php @@ -0,0 +1,295 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Dashboard') }}

+
+ +
+
+
+ + + @if(!file_exists(base_path()."/install.lock") && Auth::User()->role == "admin") +
+

{{ __('The installer is not locked!') }}

+

{{ __('please create a file called "install.lock" in your dashboard Root directory. Otherwise no settings will be loaded!') }}

+ + +
+ @endif + + @if(config("SETTINGS::SYSTEM:ALERT_ENABLED") && !empty(config("SETTINGS::SYSTEM:ALERT_MESSAGE"))) + + @endif + +
+
+ +
+
+
+ + +
+ {{ __('Servers') }} + {{ Auth::user()->servers()->count() }} +
+ +
+ +
+ +
+
+ + +
+ {{ CREDITS_DISPLAY_NAME }} + {{ Auth::user()->Credits() }} +
+ +
+ +
+ + + +
+ +
+
+ + +
+ {{ CREDITS_DISPLAY_NAME }} {{ __('Usage') }} + {{ number_format($usage, 2, '.', '') }} + {{ __('per month') }} +
+ +
+ +
+ + + @if ($credits > 0.01 and $usage > 0) +
+
+ + +
+ {{ __('Out of Credits in', ['credits' => CREDITS_DISPLAY_NAME]) }} + + {{ $boxText }}{{ $unit }} +
+
+ + @endif +
+ + +
+ + + + +
+
+
+
+

+ + {{ __('Useful Links') }} +

+
+ +
+ @foreach ($useful_links as $useful_link) +
+ +
+ + {{ $useful_link->title }} + +
+ {!! $useful_link->description !!} +
+ @endforeach +
+ +
+ +
+ + +
+
+
+

+ + {{ __('Activity Logs') }} +

+
+ +
+
    + @foreach (Auth::user()->actions()->take(8)->orderBy('created_at', 'desc')->get() as $log) +
  • + + @if(str_starts_with($log->description,"created")) + + @elseif(str_starts_with($log->description,"redeemed")) + + @elseif(str_starts_with($log->description,"deleted")) + + @elseif(str_starts_with($log->description,"gained")) + + @elseif(str_starts_with($log->description,"updated")) + + @endif + {{ explode('\\', $log->subject_type)[2] }} + {{ ucfirst($log->description) }} + + + {{ $log->created_at->diffForHumans() }} + +
  • + @endforeach +
+
+ +
+ + @if((config('SETTINGS::REFERRAL::ENABLED') ==true)) +
+
+

+ + {{ __('Partner program') }} +

+
+ +
+ @if((config('SETTINGS::REFERRAL::ALLOWED') == "client" && Auth::user()->role != "member") || config('SETTINGS::REFERRAL::ALLOWED') == "everyone") +
+
+ + + {{__("Your referral URL")}}: + + {{__('Click to copy')}} + + +
+
+ {{__("Number of referred users:")}} {{$numberOfReferrals}} +
+
+ @if($partnerDiscount) +
+ + + + + + + + + + + + + + + + + +
{{__('Your discount')}}{{__('Discount for your new users')}}{{__('Reward per registered user')}}{{__('New user payment commision')}}
{{$partnerDiscount->partner_discount}}%{{$partnerDiscount->registered_user_discount}}%{{config('SETTINGS::REFERRAL::REWARD')}} {{config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME')}}{{($partnerDiscount->referral_system_commission==-1)?config('SETTINGS::REFERRAL:PERCENTAGE'):($partnerDiscount->referral_system_commission)}}%
+
+ @else +
+ + + + + + + + + + + + + +
{{__('Reward per registered user')}}{{__('New user payment commision')}}
{{config('SETTINGS::REFERRAL::REWARD')}} {{config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME')}}{{config('SETTINGS::REFERRAL:PERCENTAGE')}}%
+
+ @endif + @else + + {{__("Make a purchase to reveal your referral-URL")}} + @endif +
+ +
+ @endif + +
+ + +
+ +
+
+ + +@endsection diff --git a/themes/default/views/information/imprint-content.blade.php b/themes/default/views/information/imprint-content.blade.php new file mode 100644 index 00000000..fb101eef --- /dev/null +++ b/themes/default/views/information/imprint-content.blade.php @@ -0,0 +1,48 @@ +

+ This website is operated by: +

+ +

+ Company Name
+ Street Name & Number
+ City
+ Country
+ Phone: +00 000 000 000
+ Email: PUT YOUR EMAIL HERE +

+ +

+ Company Registration Number: 00000000
+ VAT Number: 000000000 + +

+ +

+ The European Commission provides a platform for online dispute resolution (OS) which is available at https://ec.europa.eu/consumers/odr/main/index.cfm?event=main.home2.show&lng=EN. + We are not obliged or willing to participate in dispute resolution proceedings before a consumer arbitration board. + +

+ +

+ Disclaimer
+ Liability for Contents
+ The contents of our pages have been created with the utmost care. However, we cannot guarantee the contents' + accuracy, completeness or topicality. According to statutory provisions, we are furthermore responsible for our own + content on these web pages. In this matter, please note that we are not obliged to monitor the transmitted or saved + information of third parties, or investigate circumstances pointing to illegal activity. Our obligations to remove + or block the use of information under generally applicable laws remain unaffected by this as per §§ 8 to 10 of the + Telemedia Act (TMG). + +

+ +

+ Liability for Links
+ Our offer contains links to external third party websites. We have no influence on the contents of those websites, + and therefore cannot assume any liability for these foreign contents. The respective provider or operator of the + pages is always responsible for the contents of the linked pages. The linked pages were checked for possible legal + violations at the time of linking. Illegal contents were not discernible at the time of linking. However, a + permanent content control of the linked pages is not reasonable without concrete evidence of a violation of law. If + we become aware of any infringements, we will remove such links immediately. + +

diff --git a/themes/default/views/information/imprint.blade.php b/themes/default/views/information/imprint.blade.php new file mode 100644 index 00000000..421c9844 --- /dev/null +++ b/themes/default/views/information/imprint.blade.php @@ -0,0 +1,22 @@ +@extends('layouts.app') + +@section('content') + + +
+
+
+
+
+
+ +
+
{{ __('Imprint') }}
+
+ @include('information.imprint-content') +
+
+
+
+ +@endsection diff --git a/themes/default/views/information/privacy-content.blade.php b/themes/default/views/information/privacy-content.blade.php new file mode 100644 index 00000000..af414485 --- /dev/null +++ b/themes/default/views/information/privacy-content.blade.php @@ -0,0 +1,261 @@ +

Last updated: December 22, 2022

+

This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information + when You use the Service and tells You about Your privacy rights and how the law protects You.

+

We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and + use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the + Free Privacy Policy + Generator.

+

Interpretation and Definitions

+

Interpretation

+

The words of which the initial letter is capitalized have meanings defined under the following conditions. The + following definitions shall have the same meaning regardless of whether they appear in singular or in plural.

+

Definitions

+

For the purposes of this Privacy Policy:

+ +

Collecting and Using Your Personal Data

+

Types of Data Collected

+

Personal Data

+

While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be + used to contact or identify You. Personally identifiable information may include, but is not limited to:

+ +

Usage Data

+

Usage Data is collected automatically when using the Service.

+

Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP address), browser type, + browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent on those + pages, unique device identifiers and other diagnostic data.

+

When You access the Service by or through a mobile device, We may collect certain information automatically, + including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address of + Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device + identifiers and other diagnostic data.

+

We may also collect information that Your browser sends whenever You visit our Service or when You access the Service + by or through a mobile device.

+

Tracking Technologies and Cookies

+

We use Cookies and similar tracking technologies to track the activity on Our Service and store certain information. + Tracking technologies used are beacons, tags, and scripts to collect and track information and to improve and + analyze Our Service. The technologies We use may include:

+ +

Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on Your personal + computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close Your web + browser. Learn more about cookies on the Free Privacy Policy website article.

+

We use both Session and Persistent Cookies for the purposes set out below:

+ +

For more information about the cookies we use and your choices regarding cookies, please visit our Cookies Policy or + the Cookies section of our Privacy Policy.

+

Use of Your Personal Data

+

The Company may use Personal Data for the following purposes:

+ +

We may share Your personal information in the following situations:

+ +

Retention of Your Personal Data

+

The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy + Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for + example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our + legal agreements and policies.

+

The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a + shorter period of time, except when this data is used to strengthen the security or to improve the functionality of + Our Service, or We are legally obligated to retain this data for longer time periods.

+

Transfer of Your Personal Data

+

Your information, including Personal Data, is processed at the Company's operating offices and in any other places + where the parties involved in the processing are located. It means that this information may be transferred to — and + maintained on — computers located outside of Your state, province, country or other governmental jurisdiction where + the data protection laws may differ than those from Your jurisdiction.

+

Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that + transfer.

+

The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance + with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country + unless there are adequate controls in place including the security of Your data and other personal information.

+

Delete Your Personal Data

+

You have the right to delete or request that We assist in deleting the Personal Data that We have collected about + You.

+

Our Service may give You the ability to delete certain information about You from within the Service.

+

You may update, amend, or delete Your information at any time by signing in to Your Account, if you have one, and + visiting the account settings section that allows you to manage Your personal information. You may also contact Us + to request access to, correct, or delete any personal information that You have provided to Us.

+

Please note, however, that We may need to retain certain information when we have a legal obligation or lawful basis + to do so.

+

Disclosure of Your Personal Data

+

Business Transactions

+

If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will + provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.

+

Law enforcement

+

Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law + or in response to valid requests by public authorities (e.g. a court or a government agency).

+

Other legal requirements

+

The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:

+ +

Security of Your Personal Data

+

The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, + or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your + Personal Data, We cannot guarantee its absolute security.

+

Children's Privacy

+

Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable + information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has + provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from + anyone under the age of 13 without verification of parental consent, We take steps to remove that information from + Our servers.

+

If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from + a parent, We may require Your parent's consent before We collect and use that information.

+

Links to Other Websites

+

Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You + will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You + visit.

+

We have no control over and assume no responsibility for the content, privacy policies or practices of any third + party sites or services.

+

Changes to this Privacy Policy

+

We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy + Policy on this page.

+

We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and + update the "Last updated" date at the top of this Privacy Policy.

+

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are + effective when they are posted on this page.

+

Contact Us

+

If you have any questions about this Privacy Policy, You can contact us:

diff --git a/themes/default/views/information/privacy.blade.php b/themes/default/views/information/privacy.blade.php new file mode 100644 index 00000000..081b186f --- /dev/null +++ b/themes/default/views/information/privacy.blade.php @@ -0,0 +1,21 @@ +@extends('layouts.app') + +@section('content') + + +
+
+
+
+
+
+
+
{{ __('Privacy Policy') }}
+
+ @include('information.privacy-content') +
+
+
+
+ +@endsection diff --git a/themes/default/views/information/tos-content.blade.php b/themes/default/views/information/tos-content.blade.php new file mode 100644 index 00000000..6dd7c129 --- /dev/null +++ b/themes/default/views/information/tos-content.blade.php @@ -0,0 +1,484 @@ + + +

+ +

+ +

Last updatedJanuary 02, 2023

+ +

+ +

+ +

+ +

TABLE OF CONTENTS

+ +

+ +
    +
  1. AGREEMENT TO TERMS
  2. +
  3. NTELLECTUAL PROPERTY RIGHTS
  4. +
  5. USER REPRESENTATIONS
  6. +
  7. USER REGISTRATION
  8. +
  9. PRODUCTS
  10. +
  11. PURCHASES AND PAYMENT
  12. +
  13. REFUNDSPOLICY
  14. +
  15. PROHIBITED ACTIVITIES
  16. +
  17. USER GENERATED CONTRIBUTIONS
  18. +
  19. CONTRIBUTION LICENSE
  20. +
  21. SOCIAL MEDIA
  22. +
  23. SUBMISSIONS
  24. +
  25. SITE MANAGEMENT
  26. +
  27. PRIVACY POLICY
  28. +
  29. TERM AND TERMINATION
  30. +
  31. MODIFICATIONS AND INTERRUPTIONS
  32. +
  33. GOVERNING LAW
  34. +
  35. DISPUTE RESOLUTION
  36. +
  37. >CORRECTIONS
  38. +
  39. DISCLAIMER
  40. +
  41. LIMITATIONS OF LIABILITY
  42. +
  43. INDEMNIFICATION
  44. +
  45. USER DATA
  46. +
  47. ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES
  48. +
  49. CALIFORNIA USERS AND RESIDENTS
  50. +
  51. MISCELLANEOUS
  52. +
  53. CONTACT US
  54. +
+ +

+ +

+ +
    +
  1. AGREEMENT TO TERMS
  2. +
+ +

+ +

These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity (“you”) andMY Company("Company", “we”, “us”, or “our”), concerning your access to and use of theexample.comwebsite as well as any other media form, media channel, mobile website or mobile application related, linked, or otherwise connected thereto (collectively, the “Site”).Our VAT number is12345678.You agree that by accessing the Site, you have read, understood, and agreed to be bound by all of these Terms of Use. IF YOU DO NOT AGREE WITH ALL OF THESE TERMS OF USE, THEN YOU ARE EXPRESSLY PROHIBITED FROM USING THE SITE AND YOU MUST DISCONTINUE USE IMMEDIATELY.

+ +

+ +

Supplemental terms and conditions or documents that may be posted on the Site from time to time are hereby expressly incorporated herein by reference. We reserve the right, in our sole discretion, to make changes or modifications to these Terms of Usefrom time to time. We will alert you about any changes by updating the “Last updated” date of these Terms of Use, and you waive any right to receive specific notice of each such change. Please ensure that you check the applicable Terms every time you use our Site so that you understand which Terms apply. You will be subject to, and will be deemed to have been made aware of and to have accepted, the changes in any revised Terms of Use by your continued use of the Site after the date such revised Terms of Use are posted.

+ +

+ +

The information provided on the Site is not intended for distribution to or use by any person or entity in any jurisdiction or country where such distribution or use would be contrary to law or regulation or which would subject us to any registration requirement within such jurisdiction or country. Accordingly, those persons who choose to access the Site from other locations do so on their own initiative and are solely responsible for compliance with local laws, if and to the extent local laws are applicable.

+ +

+ +

TheSite is not tailored to comply with industry-specific regulations (Health Insurance Portability and Accountability Act (HIPAA), Federal Information Security Management Act (FISMA), etc.), so if your interactions would be subjected to such laws, you may not use this Site. You may not use the Site in a way that would violate the Gramm-Leach-Bliley Act (GLBA).

+ +

+ +

The Site is intended for users who are at least 13 years of age. All users who are minors in the jurisdiction in which they reside (generally under the age of 18) must have the permission of, and be directly supervised by, their parent or guardian to use the Site. If you are a minor, you must have your parent or guardian read and agree to these Terms of Use prior to you using the Site.

+ +

+ +

+ +
    +
  1. INTELLECTUAL PROPERTY RIGHTS
  2. +
+ +

+ +

Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the “Content”) and the trademarks, service marks, and logos contained therein (the “Marks”) are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and unfair competition laws of the United States, international copyright laws, and international conventions. The Content and the Marks are provided on the Site “AS IS” for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission.

+ +

+ +

Provided that you are eligible to use the Site, you are granted a limited license to access and use the Site and to download or print a copy of any portion of the Content to which you have properly gained access solely for your personal, non-commercial use. We reserve all rights not expressly granted to you in and to the Site, the Content and the Marks.

+ +

+ +

+ +
    +
  1. USER REPRESENTATIONS
  2. +
+ +

+ +

By using the Site, you represent and warrant that:(1) all registration information you submit will be true, accurate, current, and complete; (2) you will maintain the accuracy of such information and promptly update such registration information as necessary;(3) you have the legal capacity and you agree to comply with these Terms of Use;(4) you are not under the age of 13;(5) you are not a minor in the jurisdiction in which you reside, or if a minor, you have received parental permission to use the Site; (6) you will not access the Site through automated or non-human means, whether through a bot, script or otherwise; (7) you will not use the Site for any illegal or unauthorized purpose; and (8) your use of the Site will not violate any applicable law or regulation.

+ +

+ +

If you provide any information that is untrue, inaccurate, not current, or incomplete, we have the right to suspend or terminate your account and refuse any and all current or future use of the Site (or any portion thereof).

+ +

+ +

+ +
    +
  1. USER REGISTRATION
  2. +
+ +

+ +

You may be required to register with the Site. You agree to keep your password confidential and will be responsible for all use of your account and password. We reserve the right to remove, reclaim, or change a username you select if we determine, in our sole discretion, that such username is inappropriate, obscene, or otherwise objectionable.

+ +

+ +

+ +
    +
  1. PRODUCTS
  2. +
+ +

+ +

All products are subject to availability. We reserve the right to discontinue any products at any time for any reason. Prices for all products are subject to change.

+ +

+ +

+ +
    +
  1. PURCHASES AND PAYMENT
  2. +
+ +

+ +

We accept the following forms of payment:

+ +

+ +

- PayPal

+ +

+ +

You agree to provide current, complete, and accurate purchase and account information for all purchases made via the Site. You further agree to promptly update account and payment information, including email address, payment method, and payment card expiration date, so that we can complete your transactions and contact you as needed. Sales tax will be added to the price of purchases as deemed required by us. We may change prices at any time. All payments shall beinU.S. dollars.

+ +

+ +

You agree to pay all charges at the prices then in effect for your purchases and any applicable shipping fees, and you authorize us to charge your chosen payment provider for any such amounts upon placing your order.We reserve the right to correct any errors or mistakes in pricing, even if we have already requested or received payment.

+ +

+ +

We reserve the right to refuse any order placed through the Site. We may, in our sole discretion, limit or cancel quantities purchased per person, per household, or per order. These restrictions may include orders placed by or under the same customer account, the same payment method, and/or orders that use the same billing or shipping address. We reserve the right to limit or prohibit orders that, in our sole judgment, appear to be placed by dealers, resellers, or distributors.

+ +

+ +

+ +
    +
  1. REFUNDSPOLICY
  2. +
+ +

+ +

All sales are final and no refund will be issued.

+ +

+ +

+ +
    +
  1. PROHIBITED ACTIVITIES
  2. +
+ +

+ +

You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by us.

+ +

+ +

As a user of the Site, you agree not to:

+ + + +

+ +

+ +
    +
  1. USER GENERATED CONTRIBUTIONS
  2. +
+ +

+ +

The Site does not offer users to submit or post content. We may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated in accordance with the Site Privacy Policy. When you create or make available any Contributions, you thereby represent and warrant that:

+ + + +

Any use of the Site or the Marketplace Offerings in violation of the foregoing violates these Terms of Use and may result in, among other things, termination or suspension of your rights to use the Site and the Marketplace Offerings.

+ +

+ +

+ +
    +
  1. CONTRIBUTION LICENSE
  2. +
+ +

+ +

You and Site agree that we may access, store, process, and use any information and personal data that you provide following the terms of the Privacy Policy and your choices (including settings).

+ +

+ +

By submitting suggestions or other feedback regarding the Site, you agree that we can use and share such feedback for any purpose without compensation to you.

+ +

+ +

We do not assert any ownership over your Contributions. You retain full ownership of all of your Contributions and any intellectual property rights or other proprietary rights associated with your Contributions. We are not liable for any statements or representations in your Contributions provided by you in any area on the Site. You are solely responsible for your Contributions to the Site and you expressly agree to exonerate us from any and all responsibility and to refrain from any legal action against us regarding your Contributions.

+ +

+ +

+ +
    +
  1. SOCIAL MEDIA
  2. +
+ +

+ +

As part of the functionality of the Site, you may link your account with online accounts you have with third-party service providers (each such account, a “Third-Party Account”) by either: (1) providing your Third-Party Account login information through the Site; or (2) allowing us to access yourThird-PartyAccount, as is permitted under the applicable terms and conditions that govern your use of eachThird-PartyAccount. You represent and warrant that you are entitled to disclose yourThird-PartyAccount login information to us and/or grant us access to yourThird-PartyAccount, without breach by you of any of the terms and conditions that govern your use of the applicableThird-PartyAccount, and without obligating us to pay any fees or making us subject to any usage limitations imposed by the third-party service provider of theThird-PartyAccount. By granting us access to anyThird-PartyAccounts, you understand that (1) we may access, make available, and store (if applicable) any content that you have provided to and stored in yourThird-PartyAccount (the “Social Network Content”) so that it is available on and through the Site via your account, including without limitation any friend lists and (2) we may submit to and receive from yourThird-PartyAccount additional information to the extent you are notified when you link your account with theThird-PartyAccount. Depending on theThird-PartyAccounts you choose and subject to the privacy settings that you have set in suchThird-PartyAccounts, personally identifiable information that you post to yourThird-PartyAccounts may be available on and through your account on the Site. Please note that if aThird-PartyAccount or associated service becomes unavailable or our access to suchThird-PartyAccount is terminated by the third-party service provider, then Social Network Content may no longer be available on and through the Site. You will have the ability to disable the connection between your account on the Site and yourThird-PartyAccounts at any time. PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD-PARTY SERVICE PROVIDERS ASSOCIATED WITH YOUR THIRD-PARTY ACCOUNTS IS GOVERNED SOLELY BY YOUR AGREEMENT(S) WITH SUCH THIRD-PARTY SERVICE PROVIDERS. We make no effort to review any Social Network Content for any purpose, including but not limited to, for accuracy, legality, or non-infringement, and we are not responsible for any Social Network Content. You acknowledge and agree that we may access your email address book associated with aThird-PartyAccount and your contacts list stored on your mobile device or tablet computer solely for purposes of identifying and informing you of those contacts who have also registered to use the Site. You can deactivate the connection between the Site and yourThird-PartyAccount by contacting us using the contact information below or through your account settings (if applicable). We will attempt to delete any information stored on our servers that was obtained through suchThird-PartyAccount, except the username and profile picture that become associated with your account.

+ +

+ +

+ +
    +
  1. SUBMISSIONS
  2. +
+ +

+ +

You acknowledge and agree that any questions, comments, suggestions, ideas, feedback, or other information regarding the Site or the Marketplace Offerings ("Submissions") provided by you to us are non-confidential and shall become our sole property. We shall own exclusive rights, including all intellectual property rights, and shall be entitled to the unrestricted use and dissemination of these Submissions for any lawful purpose, commercial or otherwise, without acknowledgment or compensation to you. You hereby waive all moral rights to any such Submissions, and you hereby warrant that any such Submissions are original with you or that you have the right to submit such Submissions. You agree there shall be no recourse against us for any alleged or actual infringement or misappropriation of any proprietary right in your Submissions.

+ +

+ +

+ +
    +
  1. SITE MANAGEMENT
  2. +
+ +

+ +

We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site and the Marketplace Offerings.

+ +

+ +

+ +

+ +

We care about data privacy and security. Please review our Privacy Policy:/privacy. By using the Site or the Marketplace Offerings, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use. Please be advised the Site and the Marketplace Offerings are hosted inGermany. If you access the Site or the Marketplace Offerings from any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws inGermany, then through your continued use of the Site, you are transferring your data toGermany, and you expressly consent to have your data transferred to and processed inGermany.Further, we do not knowingly accept, request, or solicit information from children or knowingly market to children. Therefore, in accordance with the U.S. Children’s Online Privacy Protection Act, if we receive actual knowledge that anyone under the age of 13 has provided personal information to us without the requisite and verifiable parental consent, we will delete that information from the Site as quickly as is reasonably practical.

+ +

+ +

+ +
    +
  1. TERM AND TERMINATION
  2. +
+ +

+ +

These Terms of Use shall remain in full force and effect while you use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE AND THE MARKETPLACE OFFERINGS (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE AND THE MARKETPLACE OFFERINGS OR DELETEYOUR ACCOUNT ANDANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION.

+ +

+ +

If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress.

+ +

+ +

+ +
    +
  1. MODIFICATIONS AND INTERRUPTIONS
  2. +
+ +

+ +

We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to update any information on our Site. We also reserve the right to modify or discontinue all or part of the Marketplace Offerings without notice at any time. We will not be liable to you or any third party for any modification, price change, suspension, or discontinuance of the Site or the Marketplace Offerings.

+ +

+ +

We cannot guarantee the Site and the Marketplace Offerings will be available at all times. We may experience hardware, software, or other problems or need to perform maintenance related to the Site, resulting in interruptions, delays, or errors. We reserve the right to change, revise, update, suspend, discontinue, or otherwise modify the Site or the Marketplace Offerings at any time or for any reason without notice to you. You agree that we have no liability whatsoever for any loss, damage, or inconvenience caused by your inability to access or use the Site or the Marketplace Offerings during any downtime or discontinuance of the Site or the Marketplace Offerings. Nothing in these Terms of Use will be construed to obligate us to maintain and support the Site or the Marketplace Offerings or to supply any corrections, updates, or releases in connection therewith.

+ +

+ +

+ +
    +
  1. GOVERNING LAW
  2. +
+ +

+ +

These conditions are governed by and interpreted following the laws ofGermany, and the use of the United Nations Convention of Contracts for the International Sales of Goods is expressly excluded. If your habitual residence is in the EU, and you are a consumer, you additionally possess the protection provided to you by obligatory provisions of the law in your country to residence.MY Companyand yourself both agree to submit to the non-exclusive jurisdiction of the courts ofBerlin, which means that you may make a claim to defend your consumer protection rights in regards to these Conditions of Use inGermany, or in the EU country in which you reside.

+ +

+ +

+ +
    +
  1. DISPUTE RESOLUTION
  2. +
+ +

+ +

The European Commission provides an online dispute resolution platform, which you can access here:https://ec.europa.eu/consumers/odr. If you would like to bring this subject to our attention, please contact us.

+ +

+ +

+ +
    +
  1. CORRECTIONS
  2. +
+ +

+ +

There may be information on the Site that contains typographical errors, inaccuracies, or omissions that may relate to the Marketplace Offerings, including descriptions, pricing, availability, and various other information. We reserve the right to correct any errors, inaccuracies, or omissions and to change or update the information on the Site at any time, without prior notice.

+ +

+ +

+ +
    +
  1. DISCLAIMER
  2. +
+ +

+ +

THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT YOUR USE OF THE SITE SERVICES WILL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE’S CONTENT OR THE CONTENT OF ANY WEBSITES LINKED TO THIS SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE.

+ +

+ +

+ +
    +
  1. LIMITATIONS OF LIABILITY
  2. +
+ +

+ +

IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

+ +

+ +

+ +
    +
  1. INDEMNIFICATION
  2. +
+ +

+ +

You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, from and against any loss, damage, liability, claim, or demand, including reasonable attorneys’ fees and expenses, made by any third party due to or arising out of:(1) use of the Site; (2) breach of these Terms of Use; (3) any breach of your representations and warranties set forth in these Terms of Use; (4) your violation of the rights of a third party, including but not limited to intellectual property rights; or (5) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it.

+ +

+ +

+ +
    +
  1. USER DATA
  2. +
+ +

+ +

We will maintain certain data that you transmit to the Site for the purpose of managing the performance of the Site, as well as data relating to your use of the Site. Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data.

+ +

+ +

+ +
    +
  1. ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES
  2. +
+ +

+ +

Visiting the Site, sending us emails, and completing online forms constitute electronic communications. You consent to receive electronic communications, and you agree that all agreements, notices, disclosures, and other communications we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communication be in writing. YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS, AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE. You hereby waive any rights or requirements under any statutes, regulations, rules, ordinances, or other laws in any jurisdiction which require an original signature or delivery or retention of non-electronic records, or to payments or the granting of credits by any means other than electronic means.

+ +

+ +

+ +
    +
  1. CALIFORNIA USERS AND RESIDENTS
  2. +
+ +

+ +

If any complaint with us is not satisfactorily resolved, you can contact the Complaint Assistance Unit of the Division of Consumer Services of the California Department of Consumer Affairs in writing at 1625 North Market Blvd., Suite N 112, Sacramento, California 95834 or by telephone at (800) 952-5210 or (916) 445-1254.

+ +

+ +

+ +
    +
  1. MISCELLANEOUS
  2. +
+ +

+ +

These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use.

+ +

+ +

+ +
    +
  1. CONTACT US
  2. +
+ +

+ +

In order to resolve a complaint regarding the Site or to receive further information regarding use of the Site, please contact us at:

+ +

+ +

MY Company

+ +

Some Street

+ +

Some City,Some State12356

+ +

Germany

+ +

Phone:112345678

+ +

myemail@eamil.com

diff --git a/themes/default/views/information/tos.blade.php b/themes/default/views/information/tos.blade.php new file mode 100644 index 00000000..8e16680c --- /dev/null +++ b/themes/default/views/information/tos.blade.php @@ -0,0 +1,21 @@ +@extends('layouts.app') + +@section('content') + + +
+
+
+
+
+
+
+
{{ __('Terms of Service') }}
+
+ @include('information.tos-content') +
+
+
+
+ +@endsection diff --git a/themes/default/views/layouts/app.blade.php b/themes/default/views/layouts/app.blade.php new file mode 100644 index 00000000..513b18bb --- /dev/null +++ b/themes/default/views/layouts/app.blade.php @@ -0,0 +1,65 @@ + + + + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + + + + + + + + + @if (config('SETTINGS::RECAPTCHA:ENABLED') == 'true') + {!! htmlScriptTagJsApi() !!} + @endif + +@yield('content') + + + + + diff --git a/themes/default/views/layouts/main.blade.php b/themes/default/views/layouts/main.blade.php new file mode 100644 index 00000000..e759fb21 --- /dev/null +++ b/themes/default/views/layouts/main.blade.php @@ -0,0 +1,522 @@ + + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + {{-- --}} + + + {{-- summernote --}} + + + {{-- datetimepicker --}} + + + {{-- select2 --}} + + + + + + + + + +
+ + + + + + + + +
+ + @if (!Auth::user()->hasVerifiedEmail()) + @if (Auth::user()->created_at->diffInHours(now(), false) > 1) +
+
{{ __('Warning!') }}
+ {{ __('You have not yet verified your email address') }} {{ __('Click here to resend verification email') }} +
+ {{ __('Please contact support If you didnt receive your verification email.') }} +
+ @endif + @endif + + @yield('content') + + @include('models.redeem_voucher_modal') +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/default/views/mail/payment/confirmed.blade.php b/themes/default/views/mail/payment/confirmed.blade.php new file mode 100644 index 00000000..384fd196 --- /dev/null +++ b/themes/default/views/mail/payment/confirmed.blade.php @@ -0,0 +1,18 @@ +@component('mail::message') +# {{__('Thank you for your purchase!')}} +{{__('Your payment has been confirmed; Your credit balance has been updated.')}}'
+ +# Details +___ +### {{__('Payment ID')}}: **{{$payment->id}}**
+### {{__('Status')}}: **{{$payment->status}}**
+### {{__('Price')}}: **{{$payment->formatToCurrency($payment->total_price)}}**
+### {{__('Type')}}: **{{$payment->type}}**
+### {{__('Amount')}}: **{{$payment->amount}}**
+### {{__('Balance')}}: **{{$payment->user->credits}}**
+### {{__('User ID')}}: **{{$payment->user_id}}**
+ +
+{{__('Thanks')}},
+{{ config('app.name') }} +@endcomponent diff --git a/themes/default/views/mail/ticket/admin/create.blade.php b/themes/default/views/mail/ticket/admin/create.blade.php new file mode 100644 index 00000000..b0b3f1a3 --- /dev/null +++ b/themes/default/views/mail/ticket/admin/create.blade.php @@ -0,0 +1,25 @@ +@component('mail::message') +Ticket #{{$ticket->ticket_id}} has been opened by **{{$user->name}}** + +### Details: +Client: {{$user->name}}
+Subject: {{$ticket->title}}
+Category: {{ $ticket->ticketcategory->name }}
+Priority: {{ $ticket->priority }}
+Status: {{ $ticket->status }}
+ +___ +``` +{{ $ticket->message }} +``` +___ +
+You can respond to this ticket by simply replying to this email or through the admin area at the url below. +
+ +{{ route('moderator.ticket.show', ['ticket_id' => $ticket->ticket_id]) }} + +
+{{__('Thanks')}},
+{{ config('app.name') }} +@endcomponent diff --git a/themes/default/views/mail/ticket/admin/reply.blade.php b/themes/default/views/mail/ticket/admin/reply.blade.php new file mode 100644 index 00000000..704db26f --- /dev/null +++ b/themes/default/views/mail/ticket/admin/reply.blade.php @@ -0,0 +1,25 @@ +@component('mail::message') +Ticket #{{$ticket->ticket_id}} has had a new reply posted by **{{$user->name}}** + +### Details +Client: {{$user->name}}
+Subject: {{$ticket->title}}
+Category: {{ $ticket->ticketcategory->name }}
+Priority: {{ $ticket->priority }}
+Status: {{ $ticket->status }}
+ +___ +``` +{{ $newmessage }} +``` +___ +
+You can respond to this ticket by simply replying to this email or through the admin area at the url below. +
+ +{{ route('moderator.ticket.show', ['ticket_id' => $ticket->ticket_id]) }} + +
+{{__('Thanks')}},
+{{ config('app.name') }} +@endcomponent diff --git a/themes/default/views/mail/ticket/user/create.blade.php b/themes/default/views/mail/ticket/user/create.blade.php new file mode 100644 index 00000000..48011c9c --- /dev/null +++ b/themes/default/views/mail/ticket/user/create.blade.php @@ -0,0 +1,13 @@ +@component('mail::message') +Hello {{$ticket->user->name}}, + +This is a notification that we have received your support request, and your ticket number is **#{{$ticket->ticket_id}}**. + +We will be responding to this ticket as soon as possible. If this is a Setup request, please understand that these requests take longer than regular support timeframes. Please be aware that Setups may take up to 48 hours to be completed. + +Thank you so much for being so understanding. + +
+{{__('Thanks')}},
+{{ config('app.name') }} +@endcomponent diff --git a/themes/default/views/mail/ticket/user/reply.blade.php b/themes/default/views/mail/ticket/user/reply.blade.php new file mode 100644 index 00000000..4dead156 --- /dev/null +++ b/themes/default/views/mail/ticket/user/reply.blade.php @@ -0,0 +1,18 @@ +@component('mail::message') +A response has been added to your ticket. Please see below for our response! + +### Details +Ticket ID : {{ $ticket->ticket_id }}
+Subject: {{ $ticket->title }}
+Status: {{ $ticket->status }}
+ +___ +``` +{{ $newmessage }} +``` +___ +
+
+{{__('Thanks')}},
+{{ config('app.name') }} +@endcomponent \ No newline at end of file diff --git a/themes/default/views/models/redeem_voucher_modal.blade.php b/themes/default/views/models/redeem_voucher_modal.blade.php new file mode 100644 index 00000000..a9c888fd --- /dev/null +++ b/themes/default/views/models/redeem_voucher_modal.blade.php @@ -0,0 +1,109 @@ + + + + + diff --git a/themes/default/views/moderator/ticket/blacklist.blade.php b/themes/default/views/moderator/ticket/blacklist.blade.php new file mode 100644 index 00000000..403a5b90 --- /dev/null +++ b/themes/default/views/moderator/ticket/blacklist.blade.php @@ -0,0 +1,182 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Ticket Blacklist') }}

+
+ +
+
+
+ + + +
+
+
+
+
+
+
+
{{__('Blacklist List')}}
+
+
+
+ + + + + + + + + + + + + +
{{__('User')}}{{__('Status')}}{{__('Reason')}}{{__('Created At')}}{{__('Actions')}}
+
+
+
+
+
+
+
{{__('Add To Blacklist')}} +
+
+
+
+ @csrf +
+ + +
+
+ + +
+ +
+
+
+
+
+
+
+ + + +@endsection + diff --git a/themes/default/views/moderator/ticket/index.blade.php b/themes/default/views/moderator/ticket/index.blade.php new file mode 100644 index 00000000..fe908a0f --- /dev/null +++ b/themes/default/views/moderator/ticket/index.blade.php @@ -0,0 +1,91 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Ticket')}}

+
+ +
+
+
+ + + +
+
+ +
+ +
+
+
{{__('Ticket List')}}
+
+
+ +
+ + + + + + + + + + + + + + + +
{{__('Category')}}{{__('Title')}}{{__('User')}}{{__('Priority')}}{{__('Status')}}{{__('Last Updated')}}{{__('Actions')}}
+ +
+
+ + + +
+ + +
+ + + + +@endsection diff --git a/themes/default/views/moderator/ticket/show.blade.php b/themes/default/views/moderator/ticket/show.blade.php new file mode 100644 index 00000000..f6a309f2 --- /dev/null +++ b/themes/default/views/moderator/ticket/show.blade.php @@ -0,0 +1,144 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Ticket') }}

+
+ +
+
+
+ + + +
+
+
+
+
+
+
+
#{{ $ticket->ticket_id }}
+
+
+
+
+ @if(!empty($server)) +

Server: pterodactyl_id }}" target="__blank">{{ $server->name }}

+ @endif +

Title: {{ $ticket->title }}

+

Category: {{ $ticketcategory->name }}

+

+ @if ($ticket->status === 'Open') + Status: Open + @elseif ($ticket->status === 'Closed') + Status: Closed + @elseif ($ticket->status === 'Answered') + Status: Answered + @elseif ($ticket->status === 'Client Reply') + Status: Client Reply + @endif +

+

Created on: {{ $ticket->created_at->diffForHumans() }}

+ @if($ticket->status!='Closed') +
+ {{csrf_field()}} + {{method_field("POST") }} + +
+ @endif +
+
+
+
+
+
+
+
+
{{__('Comment')}}
+
+
+
+
+
+
+
User Image + {{ $ticket->user->name }} + @if($ticket->user->role === "member") + Member + @elseif ($ticket->user->role === "client") + Client + @elseif ($ticket->user->role === "moderator") + Moderator + @elseif ($ticket->user->role === "admin") + Admin + @endif +
+ {{ $ticket->created_at->diffForHumans() }} +
+
+
{{ $ticket->message }}
+
+ @foreach ($ticketcomments as $ticketcomment) +
+
+
+
User Image + {{ $ticketcomment->user->name }} + @if($ticketcomment->user->role === "member") + Member + @elseif ($ticketcomment->user->role === "client") + Client + @elseif ($ticketcomment->user->role === "moderator") + Moderator + @elseif ($ticketcomment->user->role === "admin") + Admin + @endif +
+ {{ $ticketcomment->created_at->diffForHumans() }} +
+
+
{{ $ticketcomment->ticketcomment }}
+
+ @endforeach +
+
+ {!! csrf_field() !!} + +
+ + @if ($errors->has('ticketcomment')) + + {{ $errors->first('ticketcomment') }} + + @endif +
+
+ +
+
+
+
+
+
+
+
+
+ +@endsection + diff --git a/themes/default/views/notifications/index.blade.php b/themes/default/views/notifications/index.blade.php new file mode 100644 index 00000000..0bd9c87c --- /dev/null +++ b/themes/default/views/notifications/index.blade.php @@ -0,0 +1,69 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Notifications')}}

+
+ +
+
+
+ + + +
+
+ + +
+
+

{{__('All notifications')}}

+
+ + + + + @foreach($notifications as $notification) + + @endforeach + +
+
+ {!! $notifications->links() !!} +
+
+
+ + + + +
+
+ + +@endsection diff --git a/themes/default/views/notifications/show.blade.php b/themes/default/views/notifications/show.blade.php new file mode 100644 index 00000000..6fc2a067 --- /dev/null +++ b/themes/default/views/notifications/show.blade.php @@ -0,0 +1,50 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

Notifications

+
+ +
+
+
+ + + +
+
+ + +
+
+
+
+
+
{{ $notification->data['title'] }}
+
{{ $notification->created_at->diffForHumans() }}
+
+
+ +
+ {!! $notification->data['content'] !!} +
+
+
+
+ + +
+
+ + +@endsection diff --git a/themes/default/views/profile/index.blade.php b/themes/default/views/profile/index.blade.php new file mode 100644 index 00000000..41682761 --- /dev/null +++ b/themes/default/views/profile/index.blade.php @@ -0,0 +1,368 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Profile') }}

+
+ +
+
+
+ + + +
+
+ +
+
+ @if (!Auth::user()->hasVerifiedEmail() && strtolower($force_email_verification) == 'true') +
+
{{ __('Required Email verification!') }} +
+ {{ __('You have not yet verified your email address') }} + {{ __('Click here to resend verification email') }} +
+ {{ __('Please contact support If you didnt receive your verification email.') }} + +
+ @endif + + @if (is_null(Auth::user()->discordUser) && strtolower($force_discord_verification) == 'true') + @if (!empty(config('SETTINGS::DISCORD:CLIENT_ID')) && !empty(config('SETTINGS::DISCORD:CLIENT_SECRET'))) +
+
+ {{ __('Required Discord verification!') }} +
+ {{ __('You have not yet verified your discord account') }} + {{ __('Login with discord') }}
+ {{ __('Please contact support If you face any issues.') }} +
+ @else +
+
+ {{ __('Required Discord verification!') }} +
+ {{ __('Due to system settings you are required to verify your discord account!') }}
+ {{ __('It looks like this hasnt been set-up correctly! Please contact support.') }}' +
+ @endif + @endif + +
+
+ +
+ @csrf + @method('PATCH') +
+
+
+
+
+
+ avatar +
+
+
+
+

{{ $user->name }}

+

{{ $user->email }} + @if ($user->hasVerifiedEmail()) + + @else + + @endif + +

+
+ {{ $user->Credits() }} +
+ + @if(config('SETTINGS::REFERRAL::ENABLED') == "true") + @if((config('SETTINGS::REFERRAL::ALLOWED') == "client" && $user->role != "member") || config('SETTINGS::REFERRAL::ALLOWED') == "everyone") +
+ + {{_("Referral URL")}} : + + {{route("register")}}?ref={{$user->referral_code}} + + @else + + {{_("Make a purchase to reveal your referral-URL")}} + @endif +
+ @endif +
+ +
{{ $user->role }} +
+ {{ $user->created_at->isoFormat('LL') }} +
+
+ + + +
+
+
+
+ +
+
+
+
+
+
+ @if( $errors->has('pterodactyl_error_message') ) + @foreach( $errors->get('pterodactyl_error_message') as $err ) + + {{ $err }} + + @endforeach + @endif + @if( $errors->has('pterodactyl_error_status') ) + @foreach( $errors->get('pterodactyl_error_status') as $err ) + + {{ $err }} + + @endforeach + @endif +
+ + @error('name') +
+ {{ $message }} +
+ @enderror +
+
+
+
+
+
+ + @error('email') +
+ {{ $message }} +
+ @enderror +
+
+
+
+
+
+
+
{{ __('Change Password') }}
+
+
+
+ + + + @error('current_password') +
+ {{ $message }} +
+ @enderror +
+
+
+
+
+
+ + + @error('new_password') +
+ {{ $message }} +
+ @enderror +
+
+
+
+
+
+ + + + @error('new_password_confirmation') +
+ {{ $message }} +
+ @enderror +
+
+
+
+ @if (!empty(config('SETTINGS::DISCORD:CLIENT_ID')) && !empty(config('SETTINGS::DISCORD:CLIENT_SECRET'))) +
+ @if (is_null(Auth::user()->discordUser)) + {{ __('Link your discord account!') }} +
+
+ @if ($credits_reward_after_verify_discord) +

{{ __('By verifying your discord account, you receive extra Credits and increased Server amounts') }} +

+ @endif +
+
+ + + {{ __('Login with Discord') }} + + @else +
+
+

{{ __('You are verified!') }}

+
+
+
+
+
+
+

{{ $user->discordUser->username }} + {{ $user->discordUser->locale }} +

+

{{ $user->discordUser->id }} +

+
+
avatar
+
+ +
+
+ @endif + +
+ @endif +
+
+
+ +
+
+ +
+
+
+
+
+
+ + +
+ + +
+ + + + @endsection + diff --git a/themes/default/views/servers/create.blade.php b/themes/default/views/servers/create.blade.php new file mode 100644 index 00000000..a24d2284 --- /dev/null +++ b/themes/default/views/servers/create.blade.php @@ -0,0 +1,444 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Servers') }}

+
+ +
+
+
+ + + +
+
+ +
+ @csrf +
+
+
+
{{ __('Server configuration') }} +
+
+ @if (!config("SETTINGS::SYSTEM:CREATION_OF_NEW_SERVERS")) +
+ The creation of new servers has been disabled for regular users, enable it again + {{ __('here') }}. +
+ @endif + @if ($productCount === 0 || $nodeCount === 0 || count($nests) === 0 || count($eggs) === 0) +
+
{{ __('Error!') }}
+

+ @if (Auth::user()->role == 'admin') + {{ __('Make sure to link your products to nodes and eggs.') }}
+ {{ __('There has to be at least 1 valid product for server creation') }} + {{ __('Sync now') }} + @endif + +

+
    + @if ($productCount === 0) +
  • {{ __('No products available!') }}
  • + @endif + + @if ($nodeCount === 0) +
  • {{ __('No nodes have been linked!') }}
  • + @endif + + @if (count($nests) === 0) +
  • {{ __('No nests available!') }}
  • + @endif + + @if (count($eggs) === 0) +
  • {{ __('No eggs have been linked!') }}
  • + @endif +
+
+ @endif + + +
+ +
+ +
+ @if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + +
+ + + @error('name') +
+ {{ $message }} +
+ @enderror +
+ +
+
+
+ + + +
+
+
+
+ +
+ +
+
+
+
+ +
+ + +
+
+
+
+ +
+
+
+ +
+
+ +
+ + +
+
+ + + + +@endsection diff --git a/themes/default/views/servers/index.blade.php b/themes/default/views/servers/index.blade.php new file mode 100644 index 00000000..ef856b6a --- /dev/null +++ b/themes/default/views/servers/index.blade.php @@ -0,0 +1,159 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Servers') }}

+
+ +
+
+
+ + + +
+
+ + + + +
+ @foreach ($servers as $server) + @if($server->location&&$server->node&&$server->nest&&$server->egg) +
+
+
+
{{ $server->name }} +
+
+
+
+
+
+
{{ __('Status') }}:
+
+ + {{ $server->isSuspended() ? 'Suspended' : 'Active' }} +
+
+
+
+ {{ __('Location') }}: +
+
+ {{ $server->location }} + +
+ +
+
+
+ {{ __('Software') }}: +
+
+ {{ $server->nest }} +
+ +
+
+
+ {{ __('Specification') }}: +
+
+ {{ $server->egg }} +
+
+
+
+ {{ __('Resource plan') }}: +
+
+ {{ $server->product->name }} + + +
+ +
+
+
+ {{ __('Price') }}: + + ({{ CREDITS_DISPLAY_NAME }}) + +
+
+
+
+
{{ __('per Hour') }}
+ + {{ number_format($server->product->getHourlyPrice(), 2, '.', '') }} + +
+
+
{{ __('per Month') }} +
+ + {{ $server->product->getHourlyPrice() * 24 * 30 }} + +
+
+
+
+
+
+ + +
+ @endif + @endforeach +
+ +
+
+ +@endsection diff --git a/themes/default/views/servers/settings.blade.php b/themes/default/views/servers/settings.blade.php new file mode 100644 index 00000000..9fead681 --- /dev/null +++ b/themes/default/views/servers/settings.blade.php @@ -0,0 +1,325 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Server Settings')}}

+
+ +
+
+ +
+ + + +
+
+
+
+
+
+
+
+
+

SERVER NAME

+
+ {{ $server->name }} +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+

CPU

+
+ @if($server->product->cpu == 0)Unlimited @else {{$server->product->cpu}} % @endif +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+

Memory

+
+ @if($server->product->memory == 0)Unlimited @else {{$server->product->memory}}MB @endif +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+

STORAGE

+
+ @if($server->product->disk == 0)Unlimited @else {{$server->product->disk}}MB @endif +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
{{ $server->created_at->isoFormat('LL') }}
+
{{__('Server Information')}}
+
+
+
+ +
+
+
+ +
+
+ + {{ $server->id }} + +
+
+
+
+
+
+ +
+
+ + {{ $server->identifier }} + +
+
+
+
+
+
+ +
+
+ + {{ number_format($server->product->getHourlyPrice(), 2, '.', '') }} + +
+
+
+
+
+
+ +
+
+ + {{ $server->product->getHourlyPrice() * 24 * 30 }} + +
+
+
+
+
+
+ +
+
+ + {{ $server->location }} + +
+
+
+
+
+
+ +
+
+ + {{ $server->node }} + +
+
+
+
+
+
+ +
+
+ + {{ $server->product->backups }} + +
+
+
+
+
+
+ +
+
+ + {{ $server->product->databases }} + +
+
+
+ +
+
+ +
+ + + +
+ +
+ + + + +@endsection diff --git a/themes/default/views/store/checkout.blade.php b/themes/default/views/store/checkout.blade.php new file mode 100644 index 00000000..2e0556ca --- /dev/null +++ b/themes/default/views/store/checkout.blade.php @@ -0,0 +1,179 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Store') }}

+
+ +
+
+
+ + + +
+
+ +
+
+ + + +
+ +
+
+

+ {{ config('app.name', 'Laravel') }} + {{ __('Date') }}: + {{ Carbon\Carbon::now()->isoFormat('LL') }} +

+
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + +
{{ __('Quantity') }}{{ __('Product') }}{{ __('Description') }}{{ __('Subtotal') }}
1{{ $product->quantity }} + {{ strtolower($product->type) == 'credits' ? CREDITS_DISPLAY_NAME : $product->type }} + {{ $product->description }}{{ $product->formatToCurrency($product->price) }}
+
+ +
+ + +
+ +
+ @if($total!=0) +

{{ __('Payment Methods') }}:

+ +
+ @if (config('SETTINGS::PAYMENTS:PAYPAL:SECRET') || config('SETTINGS::PAYMENTS:PAYPAL:SANDBOX_SECRET')) + + @endif + @if (config('SETTINGS::PAYMENTS:STRIPE:TEST_SECRET') || config('SETTINGS::PAYMENTS:STRIPE:SECRET')) + + @endif +
+ @else +

{{ __('This product is free for you') }}.

+ @endif +
+ +
+

{{ __('Amount Due') }} + {{ Carbon\Carbon::now()->isoFormat('LL') }}

+ +
+ + @if($discountpercent&&$discountvalue) + + + + + @endif + + + + + + + + + + + + +
{{ __('Discount') }} ({{ $discountpercent }}%):{{$product->formatToCurrency($discountvalue)}}
{{ __('Subtotal') }}:{{ $product->formatToCurrency($discountedprice) }}
{{ __('Tax') }} ({{ $taxpercent }}%):{{ $product->formatToCurrency($taxvalue) }}
{{ __('Total') }}:{{ $product->formatToCurrency($total) }}
+
+
+ +
+ + + + +
+ +
+
+
+
+ + + + + +@endsection \ No newline at end of file diff --git a/themes/default/views/store/index.blade.php b/themes/default/views/store/index.blade.php new file mode 100644 index 00000000..7d105867 --- /dev/null +++ b/themes/default/views/store/index.blade.php @@ -0,0 +1,108 @@ +@extends('layouts.main') + + +@section('content') + +
+
+
+
+

{{ __('Store') }}

+
+ +
+
+
+ + + +
+
+ +
+ +
+ + @if ($isPaymentSetup && $products->count() > 0) + +
+
+
{{ CREDITS_DISPLAY_NAME }}
+
+
+ + + + + + + + + + + + @foreach ($products as $product) + + + + + + + @endforeach + +
{{ __('Price') }}{{ __('Type') }}{{ __('Description') }}
{{ $product->formatToCurrency($product->price) }}{{ strtolower($product->type) == 'credits' ? CREDITS_DISPLAY_NAME : $product->type }} + + @if(strtolower($product->type) == 'credits') + + @elseif (strtolower($product->type) == 'server slots') + + @endif + + {{ $product->display }}{{ __('Purchase') }} +
+
+
+ + @else +
+ +

@if ($products->count() == 0) {{ __('There are no store products!') }} @else {{ __('The store is not correctly configured!') }} @endif +

+
+ + @endif + + +
+
+ + + + + +@endsection diff --git a/themes/default/views/ticket/create.blade.php b/themes/default/views/ticket/create.blade.php new file mode 100644 index 00000000..138ce836 --- /dev/null +++ b/themes/default/views/ticket/create.blade.php @@ -0,0 +1,135 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Ticket') }}

+
+ +
+
+
+ + + +
+
+
+ @csrf +
+
+
+
+
+ {{__('Open a new ticket')}} +
+
+
+
+ + + @if ($errors->has('title')) + + {{ $errors->first('title') }} + + @endif +
+ @if ($servers->count() >= 1) +
+ + + + @if ($errors->has('category')) + + {{ $errors->first('ticketcategory') }} + + @endif +
+ @endif +
+ + + + @if ($errors->has('category')) + + {{ $errors->first('ticketcategory') }} + + @endif +
+
+ + + @if ($errors->has('priority')) + + {{ $errors->first('priority') }} + + @endif +
+
+ +
+
+
+
+
+
+ {{__('Ticket details')}} +
+
+
+
+ + + @if ($errors->has('message')) + + {{ $errors->first('message') }} + + @endif +
+
+
+
+
+
+
+
+ + +@endsection + diff --git a/themes/default/views/ticket/index.blade.php b/themes/default/views/ticket/index.blade.php new file mode 100644 index 00000000..670a0176 --- /dev/null +++ b/themes/default/views/ticket/index.blade.php @@ -0,0 +1,99 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Ticket') }}

+
+ +
+
+
+ + + +
+
+
+
+
+
+
+
{{__('My Ticket')}}
+ {{__('New Ticket')}} +
+
+
+ + + + + + + + + + + + + +
{{__('Category')}}{{__('Title')}}{{__('Priority')}}{{__('Status')}}{{__('Last Updated')}}
+
+
+
+
+
+
+
{{__('Ticket Information')}} +
+
+
+

{{__("Can't start your server? Need an additional port? Do you have any other questions? Let us know by + opening a ticket.")}}

+ +
+
+
+
+
+
+ + +@endsection + diff --git a/themes/default/views/ticket/show.blade.php b/themes/default/views/ticket/show.blade.php new file mode 100644 index 00000000..2da1ccc4 --- /dev/null +++ b/themes/default/views/ticket/show.blade.php @@ -0,0 +1,156 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{ __('Ticket') }}

+
+ +
+
+
+ + + +
+
+
+
+
+
+
+
#{{ $ticket->ticket_id }}
+
+
+
+
+ @if(!empty($server)) +

Server: {{ $server->name }}

+ @endif +

Title: {{ $ticket->title }}

+

Category: {{ $ticketcategory->name }}

+

+ @if ($ticket->status === 'Open') + Status: Open + @elseif ($ticket->status === 'Closed') + Status: Closed + @elseif ($ticket->status === 'Answered') + Status: Answered + @elseif ($ticket->status === 'Client Reply') + Status: Client Reply + @endif +

+

Created on: {{ $ticket->created_at->diffForHumans() }}

+ @if($ticket->status!='Closed') +
+ {{csrf_field()}} + {{method_field("POST") }} + +
+ @endif +
+
+
+
+
+
+
+
+
{{__('Comment')}}
+
+
+
+
+
+
+
User Image + {{ $ticket->user->name }} + @if($ticket->user->role === "member") + Member + @elseif ($ticket->user->role === "client") + Client + @elseif ($ticket->user->role === "moderator") + Moderator + @elseif ($ticket->user->role === "admin") + Admin + @endif +
+ {{ $ticket->created_at->diffForHumans() }} +
+
+
{{ $ticket->message }}
+
+ @foreach ($ticketcomments as $ticketcomment) +
+
+
+
User Image + {{ $ticketcomment->user->name }} + @if($ticketcomment->user->role === "member") + Member + @elseif ($ticketcomment->user->role === "client") + Client + @elseif ($ticketcomment->user->role === "moderator") + Moderator + @elseif ($ticketcomment->user->role === "admin") + Admin + @endif +
+ {{ $ticketcomment->created_at->diffForHumans() }} +
+
+
{{ $ticketcomment->ticketcomment }}
+
+ @endforeach +
+
+ {!! csrf_field() !!} + +
+ + @if ($errors->has('ticketcomment')) + + {{ $errors->first('ticketcomment') }} + + @endif +
+
+ +
+
+
+
+
+
+
+
+
+ + +@endsection + diff --git a/themes/default/views/vendor/invoices/templates/controlpanel.blade.php b/themes/default/views/vendor/invoices/templates/controlpanel.blade.php new file mode 100644 index 00000000..20ce8587 --- /dev/null +++ b/themes/default/views/vendor/invoices/templates/controlpanel.blade.php @@ -0,0 +1,390 @@ + + + + {{ $invoice->name }} + + + + + + + {{-- Header --}} + @if($invoice->logo) + logo + @endif + + + + + + + + + +
+

+ {{ $invoice->name }} {{$invoice->getSerialNumber()}} +

+
+ @if($invoice->status) +

+ {{ $invoice->status }} +

+ @endif +

{{ __('Serial No.') }} {{ $invoice->getSerialNumber() }}

+

{{ __('Invoice date') }}: {{ $invoice->getDate() }}

+
+ + {{-- Seller - Buyer --}} + + + + + + + + + + + + + + + +
+ {{ __('Seller') }} + + {{ __('Buyer') }} +
+ @if($invoice->seller->name) +

+ {{ $invoice->seller->name }} +

+ @endif + + @if($invoice->seller->address) +

+ {{ __('Address') }}: {{ $invoice->seller->address }} +

+ @endif + + @if($invoice->seller->code) +

+ {{ __('Code') }}: {{ $invoice->seller->code }} +

+ @endif + + @if($invoice->seller->vat) +

+ {{ __('VAT Code') }}: {{ $invoice->seller->vat }} +

+ @endif + + @if($invoice->seller->phone) +

+ {{ __('Phone') }}: {{ $invoice->seller->phone }} +

+ @endif + + @foreach($invoice->seller->custom_fields as $key => $value) +

+ {{ ucfirst($key) }}: {{ $value }} +

+ @endforeach +
+ @if($invoice->buyer->name) +

+ {{ $invoice->buyer->name }} +

+ @endif + + @if($invoice->buyer->adress) +

+ {{ __('Address') }}: {{ $invoice->buyer->address }} +

+ @endif + + @if($invoice->buyer->code) +

+ {{ __('Code') }}: {{ $invoice->buyer->code }} +

+ @endif + + @if($invoice->buyer->vat) +

+ {{ __('VAT Code') }}: {{ $invoice->buyer->vat }} +

+ @endif + + @if($invoice->buyer->phone) +

+ {{ __('Phone') }}: {{ $invoice->buyer->phone }} +

+ @endif + + @foreach($invoice->buyer->custom_fields as $key => $value) +

+ {{ ucfirst($key) }}: {{ $value }} +

+ @endforeach +
+ + {{-- Table --}} + + + + + @if($invoice->hasItemUnits) + + @endif + + + @if($invoice->hasItemDiscount) + + @endif + @if($invoice->hasItemTax) + + @endif + + + + + {{-- Items --}} + @foreach($invoice->items as $item) + + + @if($invoice->hasItemUnits) + + @endif + + + @if($invoice->hasItemDiscount) + + @endif + @if($invoice->hasItemTax) + + @endif + + + + @endforeach + {{-- Summary --}} + @if($invoice->hasItemOrInvoiceDiscount()) + + + + + + @endif + @if($invoice->taxable_amount) + + + + + + @endif + @if($invoice->tax_rate) + + + + + + @endif + @if($invoice->hasItemOrInvoiceTax()) + + + + + + @endif + @if($invoice->shipping_amount) + + + + + + @endif + + + + + + +
{{ __('Description') }}{{ __('Units') }}{{ __('Quantity') }}{{ __('Price') }}{{ __('Discount') }}{{ __('Tax') }}{{ __('Subtotal') }}
+ {{ $item->title }} + + @if($item->description) +

{{ $item->description }}

+ @endif +
{{ $item->units }}{{ $item->quantity }} + {{ $invoice->formatCurrency($item->price_per_unit) }} + + {{ $invoice->formatCurrency($item->discount) }} + + {{ $invoice->formatCurrency($item->tax) }} + + {{ $invoice->formatCurrency($item->sub_total_price) }} +
{{ __('Total discount') }} + {{ $invoice->formatCurrency($invoice->total_discount) }} +
{{ __('Taxable amount') }} + {{ $invoice->formatCurrency($invoice->taxable_amount) }} +
{{ __('Tax rate') }} + {{ $invoice->tax_rate }}% +
{{ __('Total taxes') }} + {{ $invoice->formatCurrency($invoice->total_taxes) }} +
{{ __('Shipping') }} + {{ $invoice->formatCurrency($invoice->shipping_amount) }} +
{{ __('Total amount') }} + {{ $invoice->formatCurrency($invoice->total_amount) }} +
+ + @if($invoice->notes) +

+ {{ __('Notes') }}: {!! $invoice->notes !!} +

+ @endif + +

+ {{ __('Amount in words') }}: {{ $invoice->getTotalAmountInWords() }} +

+

+ {{ __('Please pay until') }}: {{ $invoice->getPayUntilDate() }} +

+ + + + diff --git a/themes/default/views/vendor/invoices/templates/default.blade.php b/themes/default/views/vendor/invoices/templates/default.blade.php new file mode 100644 index 00000000..c1fafe6c --- /dev/null +++ b/themes/default/views/vendor/invoices/templates/default.blade.php @@ -0,0 +1,390 @@ + + + + {{ $invoice->name }} + + + + + + + {{-- Header --}} + @if($invoice->logo) + logo + @endif + + + + + + + + + +
+

+ {{ $invoice->name }} {{$invoice->getSerialNumber()}} +

+
+ @if($invoice->status) +

+ {{ $invoice->status }} +

+ @endif +

{{ trans('invoices::invoice.serial') }} {{ $invoice->getSerialNumber() }}

+

{{ trans('invoices::invoice.date') }}: {{ $invoice->getDate() }}

+
+ + {{-- Seller - Buyer --}} + + + + + + + + + + + + + + + +
+ {{ trans('invoices::invoice.seller') }} + + {{ trans('invoices::invoice.buyer') }} +
+ @if($invoice->seller->name) +

+ {{ $invoice->seller->name }} +

+ @endif + + @if($invoice->seller->address) +

+ {{ trans('invoices::invoice.address') }}: {{ $invoice->seller->address }} +

+ @endif + + @if($invoice->seller->code) +

+ {{ trans('invoices::invoice.code') }}: {{ $invoice->seller->code }} +

+ @endif + + @if($invoice->seller->vat) +

+ {{ trans('invoices::invoice.vat') }}: {{ $invoice->seller->vat }} +

+ @endif + + @if($invoice->seller->phone) +

+ {{ trans('invoices::invoice.phone') }}: {{ $invoice->seller->phone }} +

+ @endif + + @foreach($invoice->seller->custom_fields as $key => $value) +

+ {{ ucfirst($key) }}: {{ $value }} +

+ @endforeach +
+ @if($invoice->buyer->name) +

+ {{ $invoice->buyer->name }} +

+ @endif + + @if($invoice->buyer->address) +

+ {{ trans('invoices::invoice.address') }}: {{ $invoice->buyer->address }} +

+ @endif + + @if($invoice->buyer->code) +

+ {{ trans('invoices::invoice.code') }}: {{ $invoice->buyer->code }} +

+ @endif + + @if($invoice->buyer->vat) +

+ {{ trans('invoices::invoice.vat') }}: {{ $invoice->buyer->vat }} +

+ @endif + + @if($invoice->buyer->phone) +

+ {{ trans('invoices::invoice.phone') }}: {{ $invoice->buyer->phone }} +

+ @endif + + @foreach($invoice->buyer->custom_fields as $key => $value) +

+ {{ ucfirst($key) }}: {{ $value }} +

+ @endforeach +
+ + {{-- Table --}} + + + + + @if($invoice->hasItemUnits) + + @endif + + + @if($invoice->hasItemDiscount) + + @endif + @if($invoice->hasItemTax) + + @endif + + + + + {{-- Items --}} + @foreach($invoice->items as $item) + + + @if($invoice->hasItemUnits) + + @endif + + + @if($invoice->hasItemDiscount) + + @endif + @if($invoice->hasItemTax) + + @endif + + + + @endforeach + {{-- Summary --}} + @if($invoice->hasItemOrInvoiceDiscount()) + + + + + + @endif + @if($invoice->taxable_amount) + + + + + + @endif + @if($invoice->tax_rate) + + + + + + @endif + @if($invoice->hasItemOrInvoiceTax()) + + + + + + @endif + @if($invoice->shipping_amount) + + + + + + @endif + + + + + + +
{{ trans('invoices::invoice.description') }}{{ trans('invoices::invoice.units') }}{{ trans('invoices::invoice.quantity') }}{{ trans('invoices::invoice.price') }}{{ trans('invoices::invoice.discount') }}{{ trans('invoices::invoice.tax') }}{{ trans('invoices::invoice.sub_total') }}
+ {{ $item->title }} + + @if($item->description) +

{{ $item->description }}

+ @endif +
{{ $item->units }}{{ $item->quantity }} + {{ $invoice->formatCurrency($item->price_per_unit) }} + + {{ $invoice->formatCurrency($item->discount) }} + + {{ $invoice->formatCurrency($item->tax) }} + + {{ $invoice->formatCurrency($item->sub_total_price) }} +
{{ trans('invoices::invoice.total_discount') }} + {{ $invoice->formatCurrency($invoice->total_discount) }} +
{{ trans('invoices::invoice.taxable_amount') }} + {{ $invoice->formatCurrency($invoice->taxable_amount) }} +
{{ trans('invoices::invoice.tax_rate') }} + {{ $invoice->tax_rate }}% +
{{ trans('invoices::invoice.total_taxes') }} + {{ $invoice->formatCurrency($invoice->total_taxes) }} +
{{ trans('invoices::invoice.shipping') }} + {{ $invoice->formatCurrency($invoice->shipping_amount) }} +
{{ trans('invoices::invoice.total_amount') }} + {{ $invoice->formatCurrency($invoice->total_amount) }} +
+ + @if($invoice->notes) +

+ {{ trans('invoices::invoice.notes') }}: {!! $invoice->notes !!} +

+ @endif + +

+ {{ trans('invoices::invoice.amount_in_words') }}: {{ $invoice->getTotalAmountInWords() }} +

+

+ {{ trans('invoices::invoice.pay_until') }}: {{ $invoice->getPayUntilDate() }} +

+ + + + diff --git a/themes/default/vite.config.js b/themes/default/vite.config.js new file mode 100644 index 00000000..10839ff1 --- /dev/null +++ b/themes/default/vite.config.js @@ -0,0 +1,37 @@ +import { defineConfig } from "vite"; +import laravel from "laravel-vite-plugin"; +import path from "path"; + + + +export default defineConfig({ + plugins: [ + laravel({ + input: [ + "themes/default/sass/app.scss", + "themes/default/js/app.js" + ], + buildDirectory: "default", + }), + + + { + name: "blade", + handleHotUpdate({ file, server }) { + if (file.endsWith(".blade.php")) { + server.ws.send({ + type: "full-reload", + path: "*", + }); + } + }, + }, + ], + resolve: { + alias: { + '@': '/themes/default/js', + '~bootstrap': path.resolve('node_modules/bootstrap'), + } + }, + +});