* update layout and bootstrap package

* update templates

Co-authored-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
Maurice Preuß 2022-02-16 09:57:17 +01:00 committed by GitHub
parent 3ba196fec6
commit f7db5497af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 55286 additions and 506 deletions

1
.gitignore vendored
View File

@ -19,3 +19,4 @@ img/
!templates/misc/
templates/Sparkle/assets/css/custom.css
vendor/
node_modules/

2
cache/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
!.gitignore
*

0
cache/.keep vendored
View File

View File

@ -49,10 +49,7 @@
"robthree/twofactorauth": "^1.6",
"froxlor/idna-convert-legacy": "^2.1",
"voku/anti-xss": "^4.1",
"twig/twig": "^3.3",
"twbs/bootstrap": "^5.1",
"components/jquery": "^3.6",
"components/font-awesome": "^5.15"
"twig/twig": "^3.3"
},
"require-dev": {
"phpunit/phpunit": "^9",

333
composer.lock generated
View File

@ -4,96 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "723dd2a8563bc4727619df8792ab2cb5",
"content-hash": "85630208bb62bcc4b337eafe9e8c540e",
"packages": [
{
"name": "components/font-awesome",
"version": "5.15.4",
"source": {
"type": "git",
"url": "https://github.com/components/font-awesome.git",
"reference": "e6fd09f30f578915cc0cf186b0dd0da54385b6be"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/components/font-awesome/zipball/e6fd09f30f578915cc0cf186b0dd0da54385b6be",
"reference": "e6fd09f30f578915cc0cf186b0dd0da54385b6be",
"shasum": ""
},
"type": "component",
"extra": {
"component": {
"styles": [
"css/all.css"
],
"files": [
"css/all.min.css",
"webfonts/*"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"CC-BY-4.0",
"MIT",
"OFL-1.1"
],
"description": "Font Awesome, the iconic SVG, font, and CSS framework.",
"support": {
"issues": "https://github.com/components/font-awesome/issues",
"source": "https://github.com/components/font-awesome/tree/5.15.4"
},
"time": "2021-08-15T10:31:24+00:00"
},
{
"name": "components/jquery",
"version": "3.6.0",
"source": {
"type": "git",
"url": "https://github.com/components/jquery.git",
"reference": "6cf38ee1fd04b6adf8e7dda161283aa35be818c3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/components/jquery/zipball/6cf38ee1fd04b6adf8e7dda161283aa35be818c3",
"reference": "6cf38ee1fd04b6adf8e7dda161283aa35be818c3",
"shasum": ""
},
"type": "component",
"extra": {
"component": {
"scripts": [
"jquery.js"
],
"files": [
"jquery.min.js",
"jquery.min.map",
"jquery.slim.js",
"jquery.slim.min.js",
"jquery.slim.min.map"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "JS Foundation and other contributors"
}
],
"description": "jQuery JavaScript Library",
"homepage": "http://jquery.com",
"support": {
"forum": "http://forum.jquery.com",
"irc": "irc://irc.freenode.org/jquery",
"issues": "https://github.com/jquery/jquery/issues",
"source": "https://github.com/jquery/jquery",
"wiki": "http://docs.jquery.com/"
},
"time": "2021-03-20T19:13:42+00:00"
},
{
"name": "froxlor/idna-convert-legacy",
"version": "v2.1.2",
@ -550,12 +462,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Iconv\\": ""
},
"files": [
"bootstrap.php"
]
],
"psr-4": {
"Symfony\\Polyfill\\Iconv\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -630,12 +542,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Grapheme\\": ""
},
"files": [
"bootstrap.php"
]
],
"psr-4": {
"Symfony\\Polyfill\\Intl\\Grapheme\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -711,12 +623,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"classmap": [
"Resources/stubs"
]
@ -798,12 +710,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
},
"files": [
"bootstrap.php"
]
],
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -875,12 +787,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php72\\": ""
},
"files": [
"bootstrap.php"
]
],
"psr-4": {
"Symfony\\Polyfill\\Php72\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -923,56 +835,6 @@
],
"time": "2021-05-27T09:17:38+00:00"
},
{
"name": "twbs/bootstrap",
"version": "v5.1.3",
"source": {
"type": "git",
"url": "https://github.com/twbs/bootstrap.git",
"reference": "1a6fdfae6be09b09eaced8f0e442ca6f7680a61e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twbs/bootstrap/zipball/1a6fdfae6be09b09eaced8f0e442ca6f7680a61e",
"reference": "1a6fdfae6be09b09eaced8f0e442ca6f7680a61e",
"shasum": ""
},
"replace": {
"twitter/bootstrap": "self.version"
},
"type": "library",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mark Otto",
"email": "markdotto@gmail.com"
},
{
"name": "Jacob Thornton",
"email": "jacobthornton@gmail.com"
}
],
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
"homepage": "https://getbootstrap.com/",
"keywords": [
"JS",
"css",
"framework",
"front-end",
"mobile-first",
"responsive",
"sass",
"web"
],
"support": {
"issues": "https://github.com/twbs/bootstrap/issues",
"source": "https://github.com/twbs/bootstrap/tree/v5.1.3"
},
"time": "2021-10-09T06:43:19+00:00"
},
{
"name": "twig/twig",
"version": "v3.3.8",
@ -1051,21 +913,21 @@
},
{
"name": "voku/anti-xss",
"version": "4.1.35",
"version": "4.1.37",
"source": {
"type": "git",
"url": "https://github.com/voku/anti-xss.git",
"reference": "4d7ec2816cd6eeebb7d5abbde8b0349f66709496"
"reference": "728e158427a263917f33b0a29eb75d866bd18d17"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/voku/anti-xss/zipball/4d7ec2816cd6eeebb7d5abbde8b0349f66709496",
"reference": "4d7ec2816cd6eeebb7d5abbde8b0349f66709496",
"url": "https://api.github.com/repos/voku/anti-xss/zipball/728e158427a263917f33b0a29eb75d866bd18d17",
"reference": "728e158427a263917f33b0a29eb75d866bd18d17",
"shasum": ""
},
"require": {
"php": ">=7.0.0",
"voku/portable-utf8": "~6.0.0"
"voku/portable-utf8": "~6.0.2"
},
"require-dev": {
"phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
@ -1106,7 +968,7 @@
],
"support": {
"issues": "https://github.com/voku/anti-xss/issues",
"source": "https://github.com/voku/anti-xss/tree/4.1.35"
"source": "https://github.com/voku/anti-xss/tree/4.1.37"
},
"funding": [
{
@ -1130,7 +992,7 @@
"type": "tidelift"
}
],
"time": "2021-12-08T15:20:33+00:00"
"time": "2022-02-15T01:57:51+00:00"
},
{
"name": "voku/portable-ascii",
@ -1208,16 +1070,16 @@
},
{
"name": "voku/portable-utf8",
"version": "6.0.2",
"version": "6.0.3",
"source": {
"type": "git",
"url": "https://github.com/voku/portable-utf8.git",
"reference": "17fc93430f64873ba7812893deb24e7644d31b71"
"reference": "82a714b5a4973974c1113e97b11c1044a8b8cb85"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/voku/portable-utf8/zipball/17fc93430f64873ba7812893deb24e7644d31b71",
"reference": "17fc93430f64873ba7812893deb24e7644d31b71",
"url": "https://api.github.com/repos/voku/portable-utf8/zipball/82a714b5a4973974c1113e97b11c1044a8b8cb85",
"reference": "82a714b5a4973974c1113e97b11c1044a8b8cb85",
"shasum": ""
},
"require": {
@ -1242,12 +1104,12 @@
},
"type": "library",
"autoload": {
"psr-4": {
"voku\\": "src/voku/"
},
"files": [
"bootstrap.php"
]
],
"psr-4": {
"voku\\": "src/voku/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -1279,7 +1141,7 @@
],
"support": {
"issues": "https://github.com/voku/portable-utf8/issues",
"source": "https://github.com/voku/portable-utf8/tree/6.0.2"
"source": "https://github.com/voku/portable-utf8/tree/6.0.3"
},
"funding": [
{
@ -1303,7 +1165,7 @@
"type": "tidelift"
}
],
"time": "2022-01-24T19:06:57+00:00"
"time": "2022-01-30T05:20:24+00:00"
}
],
"packages-dev": [
@ -1537,12 +1399,12 @@
},
"type": "library",
"autoload": {
"psr-4": {
"DeepCopy\\": "src/DeepCopy/"
},
"files": [
"src/DeepCopy/deep_copy.php"
]
],
"psr-4": {
"DeepCopy\\": "src/DeepCopy/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -1743,16 +1605,16 @@
},
{
"name": "phar-io/version",
"version": "3.1.0",
"version": "3.1.1",
"source": {
"type": "git",
"url": "https://github.com/phar-io/version.git",
"reference": "bae7c545bef187884426f042434e561ab1ddb182"
"reference": "15a90844ad40f127afd244c0cad228de2a80052a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
"reference": "bae7c545bef187884426f042434e561ab1ddb182",
"url": "https://api.github.com/repos/phar-io/version/zipball/15a90844ad40f127afd244c0cad228de2a80052a",
"reference": "15a90844ad40f127afd244c0cad228de2a80052a",
"shasum": ""
},
"require": {
@ -1788,9 +1650,9 @@
"description": "Library for handling version information and constraints",
"support": {
"issues": "https://github.com/phar-io/version/issues",
"source": "https://github.com/phar-io/version/tree/3.1.0"
"source": "https://github.com/phar-io/version/tree/3.1.1"
},
"time": "2021-02-23T14:00:09+00:00"
"time": "2022-02-07T21:56:48+00:00"
},
{
"name": "phpcompatibility/php-compatibility",
@ -2605,11 +2467,11 @@
}
},
"autoload": {
"classmap": [
"src/"
],
"files": [
"src/Framework/Assert/Functions.php"
],
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
@ -3200,16 +3062,16 @@
},
{
"name": "sebastian/global-state",
"version": "5.0.3",
"version": "5.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
"reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49"
"reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49",
"reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49",
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
"reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
"shasum": ""
},
"require": {
@ -3252,7 +3114,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
"source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3"
"source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
},
"funding": [
{
@ -3260,7 +3122,7 @@
"type": "github"
}
],
"time": "2021-06-11T13:31:12+00:00"
"time": "2022-02-14T08:28:10+00:00"
},
{
"name": "sebastian/lines-of-code",
@ -3777,16 +3639,16 @@
},
{
"name": "symfony/config",
"version": "v5.4.2",
"version": "v5.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "2e082dae50da563c639119b7b52347a2a3db4ba5"
"reference": "d65e1bd990c740e31feb07d2b0927b8d4df9956f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/2e082dae50da563c639119b7b52347a2a3db4ba5",
"reference": "2e082dae50da563c639119b7b52347a2a3db4ba5",
"url": "https://api.github.com/repos/symfony/config/zipball/d65e1bd990c740e31feb07d2b0927b8d4df9956f",
"reference": "d65e1bd990c740e31feb07d2b0927b8d4df9956f",
"shasum": ""
},
"require": {
@ -3836,7 +3698,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/config/tree/v5.4.2"
"source": "https://github.com/symfony/config/tree/v5.4.3"
},
"funding": [
{
@ -3852,20 +3714,20 @@
"type": "tidelift"
}
],
"time": "2021-12-15T11:06:13+00:00"
"time": "2022-01-03T09:50:52+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v5.4.2",
"version": "v5.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "ba94559be9738d77cd29e24b5d81cf3b89b7d628"
"reference": "974580fd67f14d65b045c11b09eb149cd4b13df5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ba94559be9738d77cd29e24b5d81cf3b89b7d628",
"reference": "ba94559be9738d77cd29e24b5d81cf3b89b7d628",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/974580fd67f14d65b045c11b09eb149cd4b13df5",
"reference": "974580fd67f14d65b045c11b09eb149cd4b13df5",
"shasum": ""
},
"require": {
@ -3925,7 +3787,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.2"
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.3"
},
"funding": [
{
@ -3941,29 +3803,29 @@
"type": "tidelift"
}
],
"time": "2021-12-29T10:10:35+00:00"
"time": "2022-01-26T16:28:35+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v2.5.0",
"version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
"reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
"reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced",
"reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=8.0.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.5-dev"
"dev-main": "3.0-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -3992,7 +3854,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0"
},
"funding": [
{
@ -4008,20 +3870,20 @@
"type": "tidelift"
}
],
"time": "2021-07-12T14:48:14+00:00"
"time": "2021-11-01T23:48:49+00:00"
},
{
"name": "symfony/filesystem",
"version": "v5.4.0",
"version": "v5.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "731f917dc31edcffec2c6a777f3698c33bea8f01"
"reference": "0f0c4bf1840420f4aef3f32044a9dbb24682731b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/731f917dc31edcffec2c6a777f3698c33bea8f01",
"reference": "731f917dc31edcffec2c6a777f3698c33bea8f01",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/0f0c4bf1840420f4aef3f32044a9dbb24682731b",
"reference": "0f0c4bf1840420f4aef3f32044a9dbb24682731b",
"shasum": ""
},
"require": {
@ -4056,7 +3918,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v5.4.0"
"source": "https://github.com/symfony/filesystem/tree/v5.4.3"
},
"funding": [
{
@ -4072,7 +3934,7 @@
"type": "tidelift"
}
],
"time": "2021-10-28T13:39:27+00:00"
"time": "2022-01-02T09:53:40+00:00"
},
{
"name": "symfony/polyfill-php80",
@ -4102,12 +3964,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php80\\": ""
},
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php80\\": ""
},
"classmap": [
"Resources/stubs"
]
@ -4185,12 +4047,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php81\\": ""
},
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php81\\": ""
},
"classmap": [
"Resources/stubs"
]
@ -4238,22 +4100,21 @@
},
{
"name": "symfony/service-contracts",
"version": "v2.5.0",
"version": "v2.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc"
"reference": "d664541b99d6fb0247ec5ff32e87238582236204"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
"reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/d664541b99d6fb0247ec5ff32e87238582236204",
"reference": "d664541b99d6fb0247ec5ff32e87238582236204",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/container": "^1.1",
"symfony/deprecation-contracts": "^2.1"
"psr/container": "^1.1"
},
"conflict": {
"ext-psr": "<1.1|>=2"
@ -4264,7 +4125,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.5-dev"
"dev-main": "2.4-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -4301,7 +4162,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v2.5.0"
"source": "https://github.com/symfony/service-contracts/tree/v2.4.1"
},
"funding": [
{
@ -4317,7 +4178,7 @@
"type": "tidelift"
}
],
"time": "2021-11-04T16:48:04+00:00"
"time": "2021-11-04T16:37:19+00:00"
},
{
"name": "theseer/tokenizer",
@ -4452,5 +4313,5 @@
"platform-dev": {
"ext-pcntl": "*"
},
"plugin-api-version": "2.0.0"
"plugin-api-version": "2.2.0"
}

View File

@ -18,24 +18,33 @@
// define default theme for configurehint, etc.
$_deftheme = 'Froxlor';
// validate correct php version
if (version_compare("7.1.0", PHP_VERSION, ">=")) {
// get hint-template
$wrongphp_hint = file_get_contents(dirname(__DIR__) . '/templates/' . $_deftheme . '/misc/phprequirementfailed.html.twig');
// replace values
$wrongphp_hint = str_replace("<FROXLOR_PHPMIN>", "7.1.0", $wrongphp_hint);
$wrongphp_hint = str_replace("<CURRENT_VERSION>", PHP_VERSION, $wrongphp_hint);
$wrongphp_hint = str_replace("<CURRENT_YEAR>", date('Y', time()), $wrongphp_hint);
die($wrongphp_hint);
function view($template, $attributes) {
$view = file_get_contents(dirname(__DIR__) . '/templates/' . $template);
return str_replace(array_keys($attributes), array_values($attributes), $view);
}
// validate correct php version
if (version_compare("7.1.0", PHP_VERSION, ">=")) {
die(
view($_deftheme . '/misc/phprequirementfailed.html.twig', [
'{{ basehref }}' => '../',
'{{ froxlor_min_version }}' => '7.1.0',
'{{ current_version }}' => PHP_VERSION,
'{{ current_year }}' => date('Y', time()),
])
);
}
// validate vendor autoloader
if (!file_exists(dirname(__DIR__) . '/vendor/autoload.php')) {
// get hint-template
$vendor_hint = file_get_contents(dirname(__DIR__) . '/templates/' . $_deftheme . '/misc/vendormissinghint.html.twig');
// replace values
$vendor_hint = str_replace("<FROXLOR_INSTALL_DIR>", dirname(__DIR__), $vendor_hint);
$vendor_hint = str_replace("<CURRENT_YEAR>", date('Y', time()), $vendor_hint);
die($vendor_hint);
die(
view($_deftheme . '/misc/vendormissinghint.html.twig', [
'{{ basehref }}' => '../',
'{{ froxlor_install_dir }}' => dirname(__DIR__),
'{{ current_year }}' => date('Y', time()),
])
);
}
require dirname(__DIR__) . '/vendor/autoload.php';

View File

@ -468,8 +468,9 @@ class FroxlorInstall
`vhostcontainer` = '1',
`vhostcontainer_servername_statement` = '1'
");
$nvh = $this->_data['webserver'] == 'apache2' ? '1' : '0';
$stmt->execute(array(
'nvh' => $this->_data['webserver'] == 'apache2' ? '1' : '0',
'nvh' => $nvh,
'serverip' => $this->_data['serverip'],
'serverport' => 80
));

View File

@ -20,24 +20,33 @@
// define default theme for configurehint, etc.
$_deftheme = 'Froxlor';
// validate correct php version
if (version_compare("7.1.0", PHP_VERSION, ">=")) {
// get hint-template
$wrongphp_hint = file_get_contents(dirname(__DIR__) . '/templates/' . $_deftheme . '/misc/phprequirementfailed.html.twig');
// replace values
$wrongphp_hint = str_replace("<FROXLOR_PHPMIN>", "7.1.0", $wrongphp_hint);
$wrongphp_hint = str_replace("<CURRENT_VERSION>", PHP_VERSION, $wrongphp_hint);
$wrongphp_hint = str_replace("<CURRENT_YEAR>", date('Y', time()), $wrongphp_hint);
die($wrongphp_hint);
function view($template, $attributes) {
$view = file_get_contents(dirname(__DIR__) . '/templates/' . $template);
return str_replace(array_keys($attributes), array_values($attributes), $view);
}
// validate correct php version
if (version_compare("7.1.0", PHP_VERSION, ">=")) {
die(
view($_deftheme . '/misc/phprequirementfailed.html.twig', [
'{{ basehref }}' => '',
'{{ froxlor_min_version }}' => '7.1.0',
'{{ current_version }}' => PHP_VERSION,
'{{ current_year }}' => date('Y', time()),
])
);
}
// validate vendor autoloader
if (!file_exists(dirname(__DIR__) . '/vendor/autoload.php')) {
// get hint-template
$vendor_hint = file_get_contents(dirname(__DIR__) . '/templates/' . $_deftheme . '/misc/vendormissinghint.html.twig');
// replace values
$vendor_hint = str_replace("<FROXLOR_INSTALL_DIR>", dirname(__DIR__), $vendor_hint);
$vendor_hint = str_replace("<CURRENT_YEAR>", date('Y', time()), $vendor_hint);
die($vendor_hint);
die(
view($_deftheme . '/misc/vendormissinghint.html.twig', [
'{{ basehref }}' => '',
'{{ froxlor_install_dir }}' => dirname(__DIR__),
'{{ current_year }}' => date('Y', time()),
])
);
}
require dirname(__DIR__) . '/vendor/autoload.php';

4
mix-manifest.json Normal file
View File

@ -0,0 +1,4 @@
{
"/templates/Froxlor/assets/js/main.js": "/templates/Froxlor/assets/js/main.js",
"/templates/Froxlor/assets/css/main.css": "/templates/Froxlor/assets/css/main.css"
}

16460
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

24
package.json Normal file
View File

@ -0,0 +1,24 @@
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "mix",
"watch": "mix watch",
"watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot",
"prod": "npm run production",
"production": "mix --production"
},
"devDependencies": {
"laravel-mix": "^6.0.42",
"resolve-url-loader": "^5.0.0",
"sass": "^1.49.7",
"sass-loader": "^12.5.0"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^6.0.0",
"@popperjs/core": "^2.11.2",
"bootstrap": "^5.1.3",
"jquery": "^3.6.0"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
/*!
* Bootstrap v5.1.3 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/

View File

@ -1,77 +1,66 @@
<!DOCTYPE html>
<html>
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="noindex, nofollow, noarchive"/>
<meta
name="GOOGLEBOT" content="nosnippet"/>
<html lang="en" {% if darkmode is defined %}class="{{ darkmode }}"{% endif %}>
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="noindex, nofollow, noarchive"/>
<meta name="googlebot" content="nosnippet"/>
<!-- Bootstrap CSS -->
<link
rel="stylesheet" href="{{ basehref|default("") }}vendor/twbs/bootstrap/dist/css/bootstrap.min.css">
<!-- CSS -->
<link href="{{ basehref|default("") }}templates/Froxlor/assets/css/main.css" rel="stylesheet">
{{ theme_css|raw }}
{% block custom_css %}{% endblock %}
<!-- FontAwesome CSS -->
<link
rel="stylesheet" href="{{ basehref|default("") }}vendor/components/font-awesome/css/all.min.css">
<!-- Scripts -->
<script src="{{ basehref|default("") }}templates/Froxlor/assets/js/main.js"></script>
{{ theme_js|raw }}
{% block custom_js %}{% endblock %}
<title>Froxlor
{% if page_title %}
|
{{ page_title }}
{% endif %}
</title>
</head>
<body {% if body_class is defined %}class="{{ body_class }}"{% endif %}>
<div class="container-fluid">
{% block navigation %}{% endblock %}
<!-- our css -->
<link href="{{ basehref|default("") }}templates/Froxlor/assets/css/main.css" rel="stylesheet">
{{ theme_css|raw }}
{% block custom_css %}{% endblock %}
{{ global_errors|raw }}
<!-- Bootstrap and necessary plugins -->
<script src="{{ basehref|default("") }}vendor/components/jquery/jquery.min.js"></script>
<script src="{{ basehref|default("") }}vendor/twbs/bootstrap/dist/js/bootstrap.min.js"></script>
{{ theme_js|raw }}
{% block custom_js %}{% endblock %}
<title>Froxlor
{% if page_title %}
|
{{ page_title }}
{% endif %}
</title>
</head>
{% block body %}{% endblock %}
<body>
<div class="container-fluid"> {% block navigation %}{% endblock %}
{{ global_errors|raw }}
{% block body %}{% endblock %}
<footer class="pt-5 pb-5 text-center">
<span><img src="{{ basehref|default("") }}templates/Froxlor/assets/img/logo_grey.png" alt="Froxlor"/>
{% if install_mode is not defined %}
{% if (get_setting('admin.show_version_login') ==
'1' and module == 'Login') or (module != 'Login'
and get_setting('admin.show_version_footer') == '1') %}{% endif %}
<footer class="py-5 text-center">
<span>
<img src="{{ basehref|default("") }}templates/Froxlor/assets/img/logo_grey.png" alt="Froxlor"/>
{% if install_mode is not defined %}
{% if (get_setting('admin.show_version_login') == '1'
and module == 'Login') or (module != 'Login'
and get_setting('admin.show_version_footer') == '1') %}
{{ call_static('\\Froxlor\\Froxlor', 'getFullVersion') }}
{% endif %}
&copy; 2009-{{ "now"|date("Y") }}
by
<a href="http://www.froxlor.org/" rel="external">the Froxlor Team</a><br/>
{% if install_mode is not defined %}
{% if (get_setting('panel.imprint_url') != '') %}
<a href="{{ get_setting('panel.imprint_url') }}" target="_blank" class="footer-link">{{ lng('imprint') }}</a>
{% endif %}
{% if (get_setting('panel.terms_url') != '') %}
<a href="{{ get_setting('panel.terms_url') }}" target="_blank" class="footer-link">{{ lng('terms') }}</a>
{% endif %}
{% if (get_setting('panel.privacy_url') != '') %}
<a href="{{ get_setting('panel.privacy_url') }}" target="_blank" class="footer-link">{{ lng('privacy') }}</a>
{% endif %}
{% endif %}
&copy; 2009-{{ "now"|date("Y") }} by <a href="https://www.froxlor.org/" rel="external">the Froxlor Team</a>
{% if install_mode is not defined %}
{% if (get_setting('panel.imprint_url') != '') %}
<a href="{{ get_setting('panel.imprint_url') }}" target="_blank" class="footer-link">{{ lng('imprint') }}</a>
{% endif %}
{% if (get_setting('panel.terms_url') != '') %}
<a href="{{ get_setting('panel.terms_url') }}" target="_blank" class="footer-link">{{ lng('terms') }}</a>
{% endif %}
{% if (get_setting('panel.privacy_url') != '') %}
<a href="{{ get_setting('panel.privacy_url') }}" target="_blank" class="footer-link">{{ lng('privacy') }}</a>
{% endif %}
{% endif %}
</span>
{% if lng('translator') %}
<span class="mt-3">
{{ lng('panel.translator') }}: {{ lng('translator') }}
</span>
{% if lng('translator') %}
<br/>
<span>{{ lng('panel.translator') }}:
{{ lng('translator') }}
{% endif %}
</footer>
</div>
</body>
</body>
{% endif %}
</footer>
</div>
</body>
</html>

View File

@ -82,7 +82,8 @@
<input type="hidden" name="check" value="1"/>
<input type="hidden" name="language" value="{{ pagecontent.form.activelang }}"/>
<input type="hidden" name="installstep" value="1"/>
<button class="btn btn-lg btn-success" type="submit" name="submitbutton">{{ lng('click_here_to_continue') }}
&raquo;</button>
<button class="btn btn-lg btn-success" type="submit" name="submitbutton">
{{ lng('click_here_to_continue') }} &raquo;
</button>
</aside>
</form>

View File

@ -1,53 +1,61 @@
{% extends "Froxlor/base.html.twig" %}
{% set body_class = "min-vh-100 d-flex align-items-center" %}
{% block body %}
<div class="container p-3 bg-light border border-top-0">
<img src="{{ basehref|default('') }}templates/Froxlor/assets/img/logo.png" alt="Froxlor Server Management Panel"/>
<section class="mt-4">
<h3 class="text-center mb-3">{{ pagetitle }}</h3>
{% if pagecontent.checks is defined or pagecontent.installprocess is defined %}
<table class="table table-borderless table-sm">
{% if pagecontent.checks is defined %}
{% set checks = pagecontent.checks %}
{% else %}
{% set checks = pagecontent.installprocess %}
{% endif %}
{% for check in checks %}
<tr class="{% if check.result == 1 %}table-danger{% elseif check.result == 2 %}table-warning{% endif %}">
<td class="w-75" scope="row">{{ check.title }}</td>
<td class="col-auto text-end{% if check.result == 0 %} text-success{% endif %}">
<span class="d-none d-md-inline">{{ check.result_txt }}</span>
{% if check.result == 0 %}&nbsp;&check;{% elseif check.result == 2 %}<span class="d-md-none">&nbsp;???</span>{% elseif check.result == 1 %}<span class="d-md-none">&nbsp;!!!</span>
{% endif %}
</td>
</tr>
{% if check.result_desc is not empty %}
<tr>
<td colspan="2" class="text-end">
<small>{{ check.result_desc|raw }}</span>
<div class="container max-w-lg flex align-content-center mt-5">
<img src="{{ basehref|default('') }}templates/Froxlor/assets/img/logo.png" class="filter-me" alt="Froxlor Server Management Panel"/>
<section class="card shadow mt-5">
<div class="card-body">
<h3 class="card-title mb-3">{{ pagetitle }}</h3>
{% if pagecontent.checks is defined or pagecontent.installprocess is defined %}
<table class="table table-borderless table-sm">
{% if pagecontent.checks is defined %}
{% set checks = pagecontent.checks %}
{% else %}
{% set checks = pagecontent.installprocess %}
{% endif %}
{% for check in checks %}
<tr class="{% if check.result == 1 %}table-danger{% elseif check.result == 2 %}table-warning{% endif %}">
<td class="w-75" scope="row">{{ check.title }}</td>
<td class="col-auto text-end{% if check.result == 0 %} text-success{% endif %}">
<span class="d-none d-md-inline">{{ check.result_txt }}</span>
{% if check.result == 0 %}&nbsp;<i class="fa fa-check-circle" {% elseif check.result == 2 %}<span class="d-md-none">&nbsp;???</span>{% elseif check.result == 1 %}<span class="d-md-none">&nbsp;!!!</span>
{% endif %}
</td>
</tr>
</small>
</td>
</tr>
{% endif %}
{% endfor %}
</table>
{% elseif pagecontent.form is defined %}
{% include "Froxlor/install/form.html.twig" %}
{% else %}
<div class="alert alert-warning" role="alert">
{{ pagecontent }}
{% if check.result_desc is not empty %}
<tr>
<td colspan="2" class="text-end">
<span>{{ check.result_desc|raw }}</span>
</td>
</tr>
{% endif %}
{% endfor %}
</table>
{% elseif pagecontent.form is defined %}
{% include "Froxlor/install/form.html.twig" %}
{% else %}
<div class="alert alert-warning" role="alert">
{{ pagecontent }}
</div>
{% endif %}
{% if pagenavigation is not empty %}
<div class="row pt-md-3">
<div class="col-12 col-md-8 d-flex align-items-center">
<h4 class="p-0 m-0 text-{% if pagenavigation.bad %}danger{% else %}success{% endif %}">{{ pagenavigation.message }}</h4>
</div>
<div class="col-12 col-md-4 text-end mt-4 mt-md-0">
<a class="btn btn-lg btn-block btn-{% if pagenavigation.bad %}warning{% else %}success{% endif %}" href="{{ pagenavigation.link}}">
{{ pagenavigation.linktext }} &raquo;
</a>
</div>
</div>
{% endif %}
</div>
</section>
</div>
{% endif %}
{% if pagenavigation is not empty %}
<div class="row pt-md-3">
<div class="col-12 col-md-8 d-flex align-items-center">
<h4 class="p-0 m-0 text-{% if pagenavigation.bad %}danger{% else %}success{% endif %}">{{ pagenavigation.message }}</h4>
</div>
<div class="col-12 col-md-4 text-end mt-4 mt-md-0">
<a class="btn btn-lg btn-block btn-{% if pagenavigation.bad %}warning{% else %}success{% endif %}" href="{{ pagenavigation.link}}">{{ pagenavigation.linktext }}
&raquo;</a>
</div>
</div>
{% endif %}</section></div>{% endblock %}
{% endblock %}

View File

@ -1,47 +1,60 @@
{% extends "Froxlor/base.html.twig" %}
{% set body_class = "min-vh-100 d-flex align-items-center" %}
{% block body %}
<div class="container p-3 bg-light border border-top-0">
<img src="{{ basehref|default('') }}templates/Froxlor/assets/img/logo.png" alt="Froxlor Server Management Panel"/>
<section class="mt-4">
<h3 class="text-center mb-3">{{ pagetitle }}</h3>
{% if upd_in_progress %}
<div class="alert alert-warning" role="alert">
{{ lng('update.updateinprogress_onlyadmincanlogin')|raw }}
</div>
{% elseif successmsg is not empty %}
<div class="alert alert-success" role="alert">
<h4 class="alert-heading">{{ lng('success.success') }}</h4>
<p>{{ successmsg|raw }}</p>
</div>
{% elseif message is not empty %}
<div class="alert alert-danger" role="alert">
<h4 class="alert-heading">{{ lng('error.error') }}</h4>
<p>{{ message|raw }}</p>
</div>
{% endif %}
<form action="index.php" method="post" enctype="application/x-www-form-urlencoded">
<div class="row mb-3">
<label for="loginname" class="col-sm-4 col-form-label">{{ lng('login.username') }}</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="loginname" id="loginname" value="" required/>
<div class="container">
<div class="row justify-content-center">
<form class="col-4 d-flex flex-column" method="post" enctype="application/x-www-form-urlencoded">
<img class="align-self-center mb-5" src="{{ basehref }}templates/Froxlor/assets/img/logo.png" alt="Froxlor Server Management Panel"/>
<div class="card shadow">
<div class="card-body">
<h5 class="card-title">{{ pagetitle }}</h5>
<p>Please log in to access your Account.</p>
{% if upd_in_progress %}
<div class="alert alert-warning" role="alert">
{{ lng('update.updateinprogress_onlyadmincanlogin')|raw }}
</div>
{% elseif successmsg is not empty %}
<div class="alert alert-success" role="alert">
<h4 class="alert-heading">{{ lng('success.success') }}</h4>
<p>{{ successmsg|raw }}</p>
</div>
{% elseif message is not empty %}
<div class="alert alert-danger" role="alert">
<h4 class="alert-heading">{{ lng('error.error') }}</h4>
<p>{{ message|raw }}</p>
</div>
{% endif %}
<div class="mb-3">
<label for="loginname" class="col-form-label">{{ lng('login.username') }}</label>
<input class="form-control" type="text" name="loginname" id="loginname" value="" required/>
</div>
<div class="mb-3">
<label for="password" class="col-form-label">{{ lng('login.password') }}</label>
<input class="form-control" type="password" name="password" id="password" value="" required/>
</div>
<div>
<label for="language" class="col-form-label">{{ lng('login.language') }}</label>
<select class="form-control" name="language" id="language" required>
<option value="de">Deutsch</option>
</select>
</div>
</div>
<div class="card-body d-grid gap-2">
<input type="hidden" name="script" value="{{ lastscript }}" />
<input type="hidden" name="qrystr" value="{{ lastqrystr }}" />
<input type="hidden" name="send" value="send" />
<button class="btn btn-primary rounded-top-0" type="submit" name="dologin">{{ lng('login.login') }}</button>
</div>
</div>
<div class="row mb-3">
<label for="password" class="col-sm-4 col-form-label">{{ lng('login.password') }}</label>
<div class="col-sm-8">
<input class="form-control" type="password" name="password" id="password" value="" required/>
</div>
</div>
<strong>language stuff noch</strong>
<aside class="text-end">
<input type="hidden" name="script" value="{{ lastscript }}" />
<input type="hidden" name="qrystr" value="{{ lastqrystr }}" />
<input type="hidden" name="send" value="send" />
<button class="btn btn-sm btn-primary" type="submit" name="dologin">{{ lng('login.login') }}</button>
</aside>
</form>
<strong>passwort vergessen stuff noch</strong>
</section>
</div>
</div>
{% endblock %}

View File

@ -1,5 +1,7 @@
{% extends "Froxlor/base.html.twig" %}
{% set body_class = "min-vh-100 d-flex align-items-center" %}
{% block body %}
<div class="alert alert-{{ type }} fade show" role="alert">
<h4 class="alert-heading">

View File

@ -1,17 +1,24 @@
{% extends "Froxlor/base.html.twig" %}
{% set body_class = "min-vh-100 d-flex align-items-center" %}
{% block body %}
<div class="container my-auto">
<div class="alert alert-primary fade show" role="alert">
<h4 class="alert-heading">
Welcome to froxlor
</h4>
<p>It seems that Froxlor has not been installed yet.</p>
<p>Click on the link below to start the installation.</p>
<hr>
<p class="mt-1 text-center">
<a href="./install/install.php" class="btn btn-primary" title="Click to start the install process">Start install</a>
</p>
</div>
</div>
<div class="container max-w-lg flex align-content-center mt-5">
<img src="templates/Sparkle/assets/img/logo.png" alt="Froxlor Server Management Panel" />
<div class="row gx-0 rounded shadow bg-primary text-white mt-5">
<div class="col p-5 rounded-start">
<h2 class="card-title">Welcome to Froxlor</h2>
<p class="lead mt-5">It seems that Froxlor has not been installed yet.</p>
<p class="lead">Click on the button below to start the installation.</p>
</div>
<div class="col text-white position-relative">
<img class="h-75 position-absolute bottom-0 end-0 rounded-corner-tl-bl" src="{{ basehref }}templates/Froxlor/assets/img/preview.png">
</div>
</div>
<div class="mt-5 text-end">
<a class="btn btn-lg btn-primary" href="./install/install.php" title="Click to start the install process">Start install</a>
</div>
</div>
{% endblock %}

View File

@ -1,5 +1,7 @@
{% extends "Froxlor/base.html.twig" %}
{% set body_class = "min-vh-100 d-flex align-items-center" %}
{% block body %}
<div class="container my-auto">
<div class="alert alert-warning fade show" role="alert">
@ -8,9 +10,7 @@
</h4>
<p>The configuration file <b>lib/userdata.inc.php</b> cannot be read from the webserver.</p>
<p>This mostly happens due to wrong ownership.<br />Try the following command to correct the ownership:</p>
<p class="mb-0">
<pre>chown -R {{ user }}:{{ group }} {{ installdir }}</pre>
</p>
<hr>
<p class="mt-1 text-center">
<a href="./install/install.php" class="btn btn-primary" title="Click to start the install process">Start install</a>

View File

@ -1,49 +1,43 @@
<!DOCTYPE html>
<html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="noindex, nofollow, noarchive" />
<meta name="GOOGLEBOT" content="nosnippet" />
<meta name="googlebot" content="nosnippet" />
<!-- Bootstrap CSS (external) -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<!-- CSS -->
<link href="{{ basehref }}templates/Froxlor/assets/css/main.css" rel="stylesheet">
<!-- Scripts -->
<script src="{{ basehref }}templates/Froxlor/assets/js/main.js"></script>
<title>Froxlor - Error</title>
</head>
<body>
<body class="min-vh-100 d-flex align-items-center">
<div class="container-fluid">
<div class="container my-auto">
<div class="alert alert-danger fade show" role="alert">
<h4 class="alert-heading">
Whoops!
</h4>
<p>It seems you are using an older version of PHP</p>
<p>Froxlor requires at least PHP version <FROXLOR_PHPMIN><br />The installed version is:
<CURRENT_VERSION>
</p>
<hr>
<p class="mt-1 text-center">
<a href="index.php" class="btn btn-primary" title="Click to refresh">Refresh</a>
</p>
<div class="container max-w-lg">
<div class="card bg-danger text-white">
<div class="card-body">
<h4 class="card-title">
Whoops!
</h4>
<p>It seems you are using an older version of PHP</p>
<p>Froxlor requires at least PHP version {{ froxlor_min_version }}</p>
<p>The installed version is: {{ current_version }}</p>
</div>
<div class="card-footer text-end">
<a href="" class="btn btn-primary" title="Click to refresh">Refresh</a>
</div>
</div>
</div>
<footer class="pt-5 pb-5 text-center">
<span><img src="templates/Froxlor/assets/img/logo_grey.png" alt="Froxlor" />
&copy; 2009-<CURRENT_YEAR> by <a href="http://www.froxlor.org/" rel="external">the Froxlor
Team</a><br />
<footer class="pý-5 text-center">
<span>
<img src="{{ basehref }}templates/Froxlor/assets/img/logo_grey.png" alt="Froxlor" />
&copy; 2009-{{ current_year }} by <a href="https://www.froxlor.org/" rel="external">the Froxlor Team</a>
</span>
</footer>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js"
integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF"
crossorigin="anonymous"></script>
</body>
</html>

View File

@ -1,50 +1,43 @@
<!DOCTYPE html>
<html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="noindex, nofollow, noarchive" />
<meta name="GOOGLEBOT" content="nosnippet" />
<meta name="googlebot" content="nosnippet" />
<!-- Bootstrap CSS (external) -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<!-- CSS -->
<link href="{{ basehref }}templates/Froxlor/assets/css/main.css" rel="stylesheet">
<!-- Scripts -->
<script src="{{ basehref }}templates/Froxlor/assets/js/main.js"></script>
<title>Froxlor - Error</title>
</head>
<body>
<body class="min-vh-100 d-flex align-items-center">
<div class="container-fluid">
<div class="container my-auto">
<div class="alert alert-danger fade show" role="alert">
<h4 class="alert-heading">
Whoops!
</h4>
<p>It seems you are missing some required files.</p>
<p>Froxlor uses composer for its external requirements. Try the following command to install them:</p>
<p class="mb-0">
cd <FROXLOR_INSTALL_DIR> && composer install --no-dev</pre>
</p>
<hr>
<p class="mt-1 text-center">
<a href="index.php" class="btn btn-primary" title="Click to refresh">Refresh</a>
</p>
<div class="container max-w-lg">
<div class="card bg-danger text-white">
<div class="card-body">
<h4 class="card-title">
Whoops!
</h4>
<p>It seems you are missing some required files.</p>
<p>Froxlor uses composer for its external requirements. Try the following command to install them:</p>
<pre>cd {{ froxlor_install_dir }} && composer install --no-dev</pre>
</div>
<div class="card-footer text-end">
<a href="" class="btn btn-primary" title="Click to refresh">Refresh</a>
</div>
</div>
</div>
<footer class="pt-5 pb-5 text-center">
<span><img src="templates/Froxlor/assets/img/logo_grey.png" alt="Froxlor" />
&copy; 2009-<CURRENT_YEAR> by <a href="http://www.froxlor.org/" rel="external">the Froxlor
Team</a><br />
<footer class="py-5 text-center">
<span>
<img src="{{ basehref }}templates/Froxlor/assets/img/logo_grey.png" alt="Froxlor" />
&copy; 2009-{{ current_year }} by <a href="https://www.froxlor.org/" rel="external">the Froxlor Team</a>
</span>
</footer>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js"
integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF"
crossorigin="anonymous"></script>
</body>
</html>

View File

@ -0,0 +1 @@
import 'bootstrap';

View File

@ -0,0 +1,9 @@
// Colors
$primary: #2a2a2a;
// Body
$body-bg: #f8f8f8;
$body-color: $primary;
// Borders
$border-radius: 0.5rem;

View File

@ -0,0 +1,72 @@
@charset "UTF-8";
@import "variables";
@import "~bootstrap/scss/bootstrap";
@import "~@fortawesome/fontawesome-free/css/all";
.max-w-lg {
max-width: 992px !important;
}
.card {
border: none;
@apply shadow;
.card-body {
padding: 1.5rem;
}
}
.rounded-corner-tl-bl {
border-radius: $border-radius 0 $border-radius 0;
}
footer {
color: #888;
font-size: 0.75rem !important;
}
footer a,
footer a:active,
footer a:visited {
color: #888;
}
.dark {
/* redefine theme colors for dark theme */
$primary: #3a3a3a;
$secondary: #111111;
$success: #3a3a3a;
$dark: #000;
$card-bg: #3a3a3a;
$theme-colors: (
"primary": $primary,
"secondary": $secondary,
"success": $success,
"danger": $danger,
"info": $indigo,
"dark": $dark,
"light": $light,
);
/* redefine theme color variables */
@each $color, $value in $theme-colors {
--#{$variable-prefix}#{$color}: #{$value};
}
/* redefine theme color rgb vars (used for bg- colors) */
$theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value");
@each $color, $value in $theme-colors-rgb {
--#{$variable-prefix}#{$color}-rgb: #{$value};
}
$body-color: #999;
$body-bg: #222;
--#{$variable-prefix}body-color: #{$body-color};
--#{$variable-prefix}body-bg: #{$body-bg};
@import "bootstrap";
}

7
webpack.mix.js Normal file
View File

@ -0,0 +1,7 @@
// webpack.mix.js
let mix = require('laravel-mix');
mix
.js('templates/Froxlor/src/main.js', 'templates/Froxlor/assets/js')
.sass('templates/Froxlor/src/scss/main.scss', 'templates/Froxlor/assets/css');