diff --git a/Sniffle/sniffle.css b/Sniffle/sniffle.css index 17e04f9..a9d64cc 100644 --- a/Sniffle/sniffle.css +++ b/Sniffle/sniffle.css @@ -117,6 +117,8 @@ object-fit: contain; background-color: #15151533; + + border-radius: var(--rad); } /* Notification header diff --git a/account.php b/account.php index 7a75fce..eb3488a 100644 --- a/account.php +++ b/account.php @@ -396,19 +396,32 @@ foreach ($check_sanity as $result) { if ($result['type'] == 'critical') { echo "

- - ".$result['message']." -

"; - } elseif ($result['type'] == 'warning') { - echo "

- - ".$result['message']." -

"; + + ".$result['message']; + + if (isset($result['link'])) echo " Link"; + + if ($result['fix'] == 'auto') { + echo "Auto fix available"; + } elseif ($result['fix'] == 'manual') { + echo "Manual fix required"; + } + + echo "

"; } else { echo "

- - ".$result['message']." -

"; + + ".$result['message']; + + if (isset($result['link'])) echo " Link"; + + if ($result['fix'] == 'auto') { + echo "Auto fix available"; + } elseif ($result['fix'] == 'manual') { + echo "Manual fix required"; + } + + echo "

"; } } diff --git a/app/app.php b/app/app.php index 1e42d0f..394f47b 100644 --- a/app/app.php +++ b/app/app.php @@ -433,24 +433,24 @@ class Sanity { $results = array(); if (!is_file(__DIR__."/../usr/conf/msg.json")) { - $results[] = array('type'=>'warning', 'message'=>'msg.json is missing'); + $results[] = array('type'=>'warning', 'message'=>'msg.json is missing', 'fix'=>'auto'); } if (!is_file(__DIR__."/../usr/conf/conf.json")) { if (is_file(__DIR__."/../usr/conf/manifest.json")) { - $results[] = array('type'=>'critical', 'message'=>'manifest.json is deprecated, please rename it to conf.json'); + $results[] = array('type'=>'critical', 'message'=>'manifest.json is deprecated, please rename it to conf.json', 'fix'=>'manual'); } else { - $results[] = array('type'=>'critical', 'message'=>'conf.json is missing, using conf.default.json instead'); + $results[] = array('type'=>'critical', 'message'=>'conf.json is missing, using conf.default.json instead', 'fix'=>'auto'); } } else { $manifest = json_decode(file_get_contents(__DIR__."/../usr/conf/conf.json"), true); if (empty($manifest['user_name']) || $manifest['user_name'] == "[your name]") { - $results[] = array('type'=>'warning', 'message'=>'conf.json is missing your name'); + $results[] = array('type'=>'warning', 'message'=>'conf.json is missing your name', 'fix'=>'manual'); } if ($manifest['upload']['rename_on_upload']) { if (empty($manifest['upload']['rename_to'])) { - $results[] = array('type'=>'critical', 'message'=>'conf.json doesnt know what to rename your files to'); + $results[] = array('type'=>'critical', 'message'=>'conf.json doesnt know what to rename your files to', 'fix'=>'manual'); } else { $rename_to = $manifest['upload']['rename_to']; $rename_rate = 0; @@ -464,15 +464,15 @@ class Sanity { if (str_contains($rename_to, '{{username}}') || str_contains($rename_to, '{{userid}}')) $rename_rate += 1; if ($rename_rate < 2) { - $results[] = array('type'=>'critical', 'message'=>'You will encounter errors when uploading images due to filenames, update your conf.json'); + $results[] = array('type'=>'critical', 'message'=>'You will encounter errors when uploading images due to filenames, update your conf.json', 'fix'=>'manual'); } elseif ($rename_rate < 5 && $rename_rate > 2) { - $results[] = array('type'=>'warning', 'message'=>'You may encounter errors when uploading images due to filenames, concider modifying your conf.json'); + $results[] = array('type'=>'warning', 'message'=>'You may encounter errors when uploading images due to filenames, concider modifying your conf.json', 'fix'=>'manual'); } } } if ($manifest['is_testing']) { - $results[] = array('type'=>'warning', 'message'=>'You are currently in testing mode, errors will be displayed to the user'); + $results[] = array('type'=>'warning', 'message'=>'You are currently in testing mode, errors will be displayed to the user. This is not recommended for production use.'); } } @@ -484,16 +484,16 @@ class Sanity { $results = array(); if (!is_dir("usr/images")) { - $results[] = array('type'=>'critical', 'message'=>'You need to setup an images folder, follow the guide on the GitHub repo'); + $results[] = array('type'=>'critical', 'message'=>'You need to setup an images folder.', 'fix'=>'auto'); } if (!is_dir("usr/images/pfp")) { - $results[] = array('type'=>'critical', 'message'=>'You need to setup an pfp folder, follow the guide on the GitHub repo'); + $results[] = array('type'=>'critical', 'message'=>'You need to setup an pfp folder.', 'fix'=>'auto'); } if (!is_dir("usr/images/previews")) { - $results[] = array('type'=>'critical', 'message'=>'You need to setup an previews folder, follow the guide on the GitHub repo'); + $results[] = array('type'=>'critical', 'message'=>'You need to setup an previews folder.', 'fix'=>'auto'); } if (!is_dir("usr/images/thumbnails")) { - $results[] = array('type'=>'critical', 'message'=>'You need to setup an thumbnails folder, follow the guide on the GitHub repo'); + $results[] = array('type'=>'critical', 'message'=>'You need to setup an thumbnails folder.', 'fix'=>'auto'); } return $results; @@ -502,8 +502,11 @@ class Sanity { function check_version(): array { $results = array(); - $app_local = json_decode(file_get_contents(__DIR__."/app.json"), true); + // Local app info + $app_local = json_decode(file_get_contents(__DIR__."/gallery.json"), true); + + // Repo app info $curl_url = "https://raw.githubusercontent.com/Fluffy-Bean/image-gallery/".$app_local['branch']."/app/settings/manifest.json"; $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); @@ -514,13 +517,44 @@ class Sanity { $app_repo = json_decode($result, true); if ($app_local['version'] < $app_repo['version']) { - $results[] = array('type'=>'critical', 'message'=>'You are not running the latest version of the app v'.$app_repo['version']); + $results[] = array('type'=>'critical', 'message'=>'You are not running the latest version of the app v'.$app_repo['version'], 'fix'=>'manual'); } elseif ($app_local['version'] > $app_repo['version']) { - $results[] = array('type'=>'critical', 'message'=>'You are running a version of the app that is newer than the latest release v'.$app_repo['version']); + $results[] = array('type'=>'critical', 'message'=>'You are running a version of the app that is newer than the latest release v'.$app_repo['version'], 'fix'=>'manual'); } if (PHP_VERSION_ID < 80000) { - $results[] = array('type'=>'warning', 'message'=>'Your current version of PHP is '.PHP_VERSION.' The reccomended version is 8.0.0 or higher'); + $results[] = array('type'=>'warning', 'message'=>'Your current version of PHP is '.PHP_VERSION.' The reccomended version is 8.0.0 or higher', 'link'=>'https://www.php.net/downloads.php'); + } + + return $results; + } + + function check_permissions(): array + { + $results = array(); + + if (!is_writable("usr/images")) { + $results[] = array('type'=>'critical', 'message'=>'You need to make the images folder writable', 'fix'=>'manual'); + } + if (!is_writable("usr/images/pfp")) { + $results[] = array('type'=>'critical', 'message'=>'You need to make the pfp folder writable', 'fix'=>'manual'); + } + if (!is_writable("usr/images/previews")) { + $results[] = array('type'=>'critical', 'message'=>'You need to make the previews folder writable', 'fix'=>'manual'); + } + if (!is_writable("usr/images/thumbnails")) { + $results[] = array('type'=>'critical', 'message'=>'You need to make the thumbnails folder writable', 'fix'=>'manual'); + } + + return $results; + } + + function check_freshinstall(): array + { + $results = array(); + + if (!is_dir("usr/conf") && !is_dir("usr/images")) { + $results[] = array('type'=>'warning', 'message'=>'You are running a fresh install, please configure your app through the settings. Alternatively you can import usr folder from a previous install', 'fix'=>'manual'); } return $results; @@ -536,9 +570,15 @@ class Sanity { foreach ($this->check_files() as $result) { $results[] = $result; } + foreach ($this->check_permissions() as $result) { + $results[] = $result; + } foreach ($this->check_version() as $result) { $results[] = $result; } + foreach ($this->check_freshinstall() as $result) { + $results[] = $result; + } return $results; } diff --git a/app/app.json b/app/gallery.json similarity index 64% rename from app/app.json rename to app/gallery.json index bb66892..83f0248 100644 --- a/app/app.json +++ b/app/gallery.json @@ -1,5 +1,5 @@ { "license": "GPL 3.0", - "version": "22.11.01", + "version": "22.11.02", "branch": "main" } \ No newline at end of file diff --git a/app/required.php b/app/required.php index 372a6aa..0a6e2ec 100644 --- a/app/required.php +++ b/app/required.php @@ -1,5 +1,5 @@ get_user_info($conn, $_SESSION['id']); + ?> Upload
- ".substr($_SESSION["username"], 0, 15).""; + } else { + echo "".substr($_SESSION["username"], 0, 15).""; + } } else { ?> Login diff --git a/css/main.css b/css/main.css index 2e9b228..b71ee24 100644 --- a/css/main.css +++ b/css/main.css @@ -114,6 +114,7 @@ nav .btn { @media (max-width: 550px) { nav { margin: 0; + padding-bottom: 1rem; position: fixed; top: auto; bottom: 0; @@ -990,7 +991,7 @@ html { max-width: 100vw; position: relative; background-color: #151515; - background-image: url("../assets/bg.svg"); + background-image: url("../assets/backgrounds/bg.svg"); background-position: center; background-size: cover; background-repeat: no-repeat; @@ -1127,6 +1128,39 @@ a.btn { background-image: linear-gradient(to right, rgba(140, 151, 125, 0.3), rgba(21, 21, 21, 0)); } +/* + |------------------------------------------------------------- + | BADGES + |------------------------------------------------------------- +*/ +.badge { + display: inline-block; + box-sizing: border-box; + margin: 0 0.25rem; + padding: 0.2em 0.4em; + border: #121212 0.2rem solid; + border-radius: 0.4rem; + color: #E8E3E3; + font-size: 0.8em; + font-weight: bold; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; +} +.badge.badge-primary { + background: rgba(140, 151, 125, 0.3); + border: #8C977D 0.2rem solid; +} +.badge.badge-critical { + background: rgba(182, 100, 103, 0.3); + border: #B66467 0.2rem solid; +} +.badge.badge-warning { + background: rgba(216, 166, 87, 0.3); + border: #D8A657 0.2rem solid; +} + /* |------------------------------------------------------------- | FORM SIZING @@ -1151,10 +1185,11 @@ textarea { */ .svg { margin: 0 0.2rem 0.1rem 0; - width: 19px; - height: 18px; + width: 1.15rem; + height: 1.1rem; vertical-align: middle; display: inline; + border-radius: 3px; } /* diff --git a/css/main.scss b/css/main.scss index 5c33a1e..8adb820 100644 --- a/css/main.scss +++ b/css/main.scss @@ -29,7 +29,7 @@ html { position: relative; background-color: $bg; - background-image: url("../assets/bg.svg"); + background-image: url("../assets/backgrounds/bg.svg"); background-position: center; background-size: cover; @@ -196,6 +196,48 @@ a.btn { background-image: linear-gradient(to right, rgba($page-accent, 0.3), rgba($bg, 0)); } +/* + |------------------------------------------------------------- + | BADGES + |------------------------------------------------------------- +*/ +@mixin badge($color, $fg: $color) { + background: rgba($color, 0.3); + border: $color $border-thickness solid; +} + +.badge { + display: inline-block; + box-sizing: border-box; + margin: 0 0.25rem; + padding: 0.2em 0.4em; + border: $black $border-thickness solid; + @if $rad <= 0 { + border-radius: 3px; + } @else { + border-radius: $rad; + } + color: $fg; + font-size: 0.8em; + font-weight: bold; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + + &.badge-primary { + @include badge($page-accent); + } + + &.badge-critical { + @include badge($red); + } + + &.badge-warning { + @include badge($orange); + } +} + /* |------------------------------------------------------------- | FORM SIZING @@ -221,12 +263,18 @@ textarea { .svg { margin: 0 0.2rem 0.1rem 0; - width: 19px; - height: 18px; + width: 1.15rem; + height: 1.1rem; vertical-align: middle; display: inline; + + @if calc($rad - 0.5rem) > 0 { + border-radius: calc($rad - 0.5rem); + } @else { + border-radius: 3px; + } } /* diff --git a/css/scss/_navigation.scss b/css/scss/_navigation.scss index f8fc725..57ba011 100644 --- a/css/scss/_navigation.scss +++ b/css/scss/_navigation.scss @@ -84,6 +84,7 @@ nav { @media (max-width: 550px) { nav { margin: 0; + padding-bottom: 1rem; position: fixed; top: auto;