From 86072cf18d9c79560d5cc1adf9b75a797617bf56 Mon Sep 17 00:00:00 2001 From: flashwave Date: Mon, 25 Apr 2016 01:26:36 +0200 Subject: [PATCH] fully routered! --- .../Settings/AppearanceController.php | 149 ++++- libraries/Controllers/Settings/Controller.php | 14 - libraries/Urls.php | 42 -- public/settings.php | 550 ------------------ sakura.php | 4 - templates/yuuno/elements/settingsNav.twig | 13 - .../yuuno/old-settings/appearance.avatar.twig | 20 - .../old-settings/appearance.background.twig | 24 - .../yuuno/old-settings/appearance.header.twig | 24 - 9 files changed, 148 insertions(+), 692 deletions(-) delete mode 100644 libraries/Urls.php delete mode 100644 public/settings.php delete mode 100644 templates/yuuno/elements/settingsNav.twig delete mode 100644 templates/yuuno/old-settings/appearance.avatar.twig delete mode 100644 templates/yuuno/old-settings/appearance.background.twig delete mode 100644 templates/yuuno/old-settings/appearance.header.twig diff --git a/libraries/Controllers/Settings/AppearanceController.php b/libraries/Controllers/Settings/AppearanceController.php index 38a8541..ebfaa00 100644 --- a/libraries/Controllers/Settings/AppearanceController.php +++ b/libraries/Controllers/Settings/AppearanceController.php @@ -8,7 +8,9 @@ namespace Sakura\Controllers\Settings; use Sakura\ActiveUser; +use Sakura\Config; use Sakura\DB; +use Sakura\File; use Sakura\Perms\Site; use Sakura\Router; use Sakura\Template; @@ -21,6 +23,97 @@ use Sakura\Template; */ class AppearanceController extends Controller { + private function handleUpload($mode, $file) + { + // Handle errors + switch ($file['error']) { + case UPLOAD_ERR_OK: + break; + + case UPLOAD_ERR_INI_SIZE: + case UPLOAD_ERR_FORM_SIZE: + return "Your file was too large!"; + + case UPLOAD_ERR_PARTIAL: + return "The upload failed!"; + + case UPLOAD_ERR_NO_TMP_DIR: + case UPLOAD_ERR_CANT_WRITE: + return "Wasn't able to save the file, contact a staff member!"; + + case UPLOAD_ERR_EXTENSION: + default: + return "Something prevented the file upload!"; + } + + // Get the temp filename + $tmpName = $_FILES[$mode]['tmp_name']; + + // Get the image meta data + $meta = getimagesize($tmpName); + + // Check if image + if (!$meta + || ( + $meta[2] !== IMAGETYPE_GIF + && $meta[2] !== IMAGETYPE_JPEG + && $meta[2] !== IMAGETYPE_PNG + ) + ) { + return "Please upload a valid image!"; + } + + // Check dimensions + $minWidth = Config::get("{$mode}_min_width"); + $minHeight = Config::get("{$mode}_min_height"); + $maxWidth = Config::get("{$mode}_max_width"); + $maxHeight = Config::get("{$mode}_max_height"); + + if ($meta[0] < $minWidth + || $meta[1] < $minHeight + || $meta[0] > $maxWidth + || $meta[1] > $maxHeight) { + return "Your image has to be at least {$minWidth}x{$minHeight}" + . " and not bigger than {$maxWidth}x{$maxHeight}, yours was {$meta[0]}x{$meta[1]}!"; + } + + // Check file size + $maxFileSize = Config::get("{$mode}_max_fsize"); + + if (filesize($tmpName) > $maxFileSize) { + $maxSizeFmt = byte_symbol($maxFileSize); + + return "Your image is not allowed to be larger than {$maxSizeFmt}!"; + } + + $userId = ActiveUser::$user->id; + $ext = image_type_to_extension($meta[2]); + + $filename = "{$mode}_{$userId}.{$ext}"; + + // Create the file + $file = File::create(file_get_contents($tmpName), $filename, ActiveUser::$user); + + // Delete the old file + $this->deleteFile($mode); + + $column = "user_{$mode}"; + + // Save new avatar + DB::table('users') + ->where('user_id', ActiveUser::$user->id) + ->update([ + $column => $file->id, + ]); + + return null; + } + + public function deleteFile($mode) + { + (new File(ActiveUser::$user->{$mode}))->delete(); + } + public function avatar() { // Check permission @@ -33,6 +126,25 @@ class AppearanceController extends Controller return Template::render('global/information'); } + $session = $_POST['session'] ?? null; + + if ($session) { + $avatar = $_FILES['avatar'] ?? null; + $redirect = Router::route('settings.appearance.avatar'); + + if ($avatar && $avatar['error'] !== UPLOAD_ERR_NO_FILE) { + $upload = $this->handleUpload('avatar', $_FILES['avatar']); + $message = $upload !== null ? $upload : "Changed your avatar!"; + } else { + $this->deleteFile('avatar'); + $message = "Deleted your avatar!"; + } + + Template::vars(compact('message', 'redirect')); + + return Template::render('global/information'); + } + return Template::render('settings/appearance/avatar'); } @@ -48,6 +160,25 @@ class AppearanceController extends Controller return Template::render('global/information'); } + $session = $_POST['session'] ?? null; + + if ($session) { + $background = $_FILES['background'] ?? null; + $redirect = Router::route('settings.appearance.background'); + + if ($background && $background['error'] !== UPLOAD_ERR_NO_FILE) { + $upload = $this->handleUpload('background', $_FILES['background']); + $message = $upload !== null ? $upload : "Changed your background!"; + } else { + $this->deleteFile('background'); + $message = "Deleted your background!"; + } + + Template::vars(compact('message', 'redirect')); + + return Template::render('global/information'); + } + return Template::render('settings/appearance/background'); } @@ -64,7 +195,23 @@ class AppearanceController extends Controller } $session = $_POST['session'] ?? null; - $header = $_POST['header'] ?? null; + + if ($session) { + $header = $_FILES['header'] ?? null; + $redirect = Router::route('settings.appearance.header'); + + if ($header && $header['error'] !== UPLOAD_ERR_NO_FILE) { + $upload = $this->handleUpload('header', $_FILES['header']); + $message = $upload !== null ? $upload : "Changed your header!"; + } else { + $this->deleteFile('header'); + $message = "Deleted your header!"; + } + + Template::vars(compact('message', 'redirect')); + + return Template::render('global/information'); + } return Template::render('settings/appearance/header'); } diff --git a/libraries/Controllers/Settings/Controller.php b/libraries/Controllers/Settings/Controller.php index 92e9e82..2e27cc1 100644 --- a/libraries/Controllers/Settings/Controller.php +++ b/libraries/Controllers/Settings/Controller.php @@ -12,7 +12,6 @@ use Sakura\Controllers\Controller as BaseController; use Sakura\Perms\Site; use Sakura\Router; use Sakura\Template; -use Sakura\Urls; /** * Base controller (which other controllers should extend on). @@ -22,26 +21,13 @@ use Sakura\Urls; */ class Controller extends BaseController { - private $urls; - public function __construct() { - $this->urls = new Urls(); - $navigation = $this->navigation(); Template::vars(compact('navigation')); } - public function go($location) - { - $location = explode('.', $location); - - $url = $this->urls->format('SETTING_MODE', $location, null, false); - - return header("Location: {$url}"); - } - public function navigation() { $nav = []; diff --git a/libraries/Urls.php b/libraries/Urls.php deleted file mode 100644 index 51ea3b6..0000000 --- a/libraries/Urls.php +++ /dev/null @@ -1,42 +0,0 @@ - - */ -class Urls -{ - /** - * Format a URL. - * - * @param string $lid doesn't do anything - * @param array $args [category, mode] - * @param bool $rewrite doesn't do anything either - * @param bool $b hackjob for the settings panel - * - * @return null|string url - */ - public function format($lid, $args = [], $rewrite = null, $b = true) - { - if ($b) { - $a = implode('.', $args); - $a = str_replace("usertitle", "title", $a); - return Router::route("settings.{$a}"); - } - - // Format urls - $formatted = vsprintf('/settings.php?cat=%s&mode=%s', $args); - - // Return the formatted url - return $formatted; - } -} diff --git a/public/settings.php b/public/settings.php deleted file mode 100644 index be3f9d3..0000000 --- a/public/settings.php +++ /dev/null @@ -1,550 +0,0 @@ -format('SETTINGS_INDEX'); - - // Check if the user is logged in - if (!ActiveUser::$user->id || !$continue) { - $renderData['page'] = [ - - 'redirect' => '/login', - 'message' => 'You must be logged in to edit your settings.', - 'success' => 0, - - ]; - - $continue = false; - } - - // Check session variables - if (!isset($_POST['timestamp']) - || !isset($_POST['mode']) - || $_POST['timestamp'] < time() - 1000 - || !isset($_POST['sessid']) - || $_POST['sessid'] != session_id() - || !$continue) { - $renderData['page'] = [ - 'redirect' => $redirect, - 'message' => 'Your session has expired, please refresh the page and try again.', - 'success' => 0, - ]; - - $continue = false; - } - - // Change settings - if ($continue) { - // Switch to the correct mode - switch ($_POST['mode']) { - // Avatar & Background - case 'avatar': - case 'background': - case 'header': - // Assign $_POST['mode'] to a $mode variable because I ain't typin that more than once - $mode = $_POST['mode']; - - // Assign the correct column and title to a variable - switch ($mode) { - case 'background': - $column = 'user_background'; - $msgTitle = 'Background'; - $current = $currentUser->background; - $permission = $currentUser->permission(Site::CHANGE_BACKGROUND); - break; - - case 'header': - $column = 'user_header'; - $msgTitle = 'Header'; - $current = $currentUser->header; - $permission = $currentUser->permission(Site::CHANGE_HEADER); - break; - - case 'avatar': - default: - $column = 'user_avatar'; - $msgTitle = 'Avatar'; - $current = $currentUser->avatar; - $permission = $currentUser->permission(Site::CHANGE_AVATAR); - } - - // Check if the user has the permissions to go ahead - if (!$permission) { - // Set render data - $renderData['page'] = [ - - 'redirect' => $redirect, - 'message' => 'You are not allowed to alter your ' . strtolower($msgTitle) . '.', - 'success' => 0, - - ]; - - break; - } - - // Set path variables - $filename = strtolower($msgTitle) . '_' . $currentUser->id; - - // Check if $_FILES is set - if (!isset($_FILES[$mode]) && empty($_FILES[$mode])) { - // Set render data - $renderData['page'] = [ - 'redirect' => $redirect, - 'message' => 'No file was uploaded.', - 'success' => 0, - ]; - break; - } - - // Check if the upload went properly - if ($_FILES[$mode]['error'] !== UPLOAD_ERR_OK && $_FILES[$mode]['error'] !== UPLOAD_ERR_NO_FILE) { - // Get the error in text - switch ($_FILES[$mode]['error']) { - case UPLOAD_ERR_INI_SIZE: - case UPLOAD_ERR_FORM_SIZE: - $msg = 'The uploaded file exceeds the maximum filesize!'; - break; - - case UPLOAD_ERR_PARTIAL: - $msg = 'The upload was interrupted!'; - break; - - case UPLOAD_ERR_NO_TMP_DIR: - case UPLOAD_ERR_CANT_WRITE: - $msg = 'Unable to save file to temporary location, contact the administrator!'; - break; - - case UPLOAD_ERR_EXTENSION: - default: - $msg = 'An unknown exception occurred!'; - break; - } - - // Set render data - $renderData['page'] = [ - 'redirect' => $redirect, - 'message' => $msg, - 'success' => 0, - ]; - break; - } - - // Check if we're not in removal mode - if ($_FILES[$mode]['error'] != UPLOAD_ERR_NO_FILE) { - // Get the meta data - $metadata = getimagesize($_FILES[$mode]['tmp_name']); - - // Check if the image is actually an image - if (!$metadata) { - // Set render data - $renderData['page'] = [ - 'redirect' => $redirect, - 'message' => 'Uploaded file is not an image.', - 'success' => 0, - ]; - - break; - } - - // Check if the image is an allowed filetype - if ((($metadata[2] !== IMAGETYPE_GIF) - && ($metadata[2] !== IMAGETYPE_JPEG) - && ($metadata[2] !== IMAGETYPE_PNG))) { - // Set render data - $renderData['page'] = [ - 'redirect' => $redirect, - 'message' => 'This filetype is not allowed.', - 'success' => 0, - ]; - break; - } - - // Check if the image is too large - if (($metadata[0] > Config::get($mode . '_max_width') - || $metadata[1] > Config::get($mode . '_max_height'))) { - // Set render data - $renderData['page'] = [ - 'redirect' => $redirect, - 'message' => 'The resolution of this picture is too big.', - 'success' => 0, - ]; - break; - } - - // Check if the image is too small - if (($metadata[0] < Config::get($mode . '_min_width') - || $metadata[1] < Config::get($mode . '_min_height'))) { - // Set render data - $renderData['page'] = [ - 'redirect' => $redirect, - 'message' => 'The resolution of this picture is too small.', - 'success' => 0, - ]; - break; - } - - // Check if the file is too large - if ((filesize($_FILES[$mode]['tmp_name']) > Config::get($mode . '_max_fsize'))) { - // Set render data - $renderData['page'] = [ - 'redirect' => $redirect, - 'message' => 'The filesize of this file is too large.', - 'success' => 0, - ]; - break; - } - } - - // Open the old file and remove it - $oldFile = new File($current); - $oldFile->delete(); - unset($oldFile); - $fileId = 0; - - if ($_FILES[$mode]['error'] != UPLOAD_ERR_NO_FILE) { - // Append extension to filename - $filename .= image_type_to_extension($metadata[2]); - - // Store the file - $file = File::create(file_get_contents($_FILES[$mode]['tmp_name']), $filename, $currentUser); - - // Assign the file id to a variable - $fileId = $file->id; - } - - // Update table - DB::table('users') - ->where('user_id', $currentUser->id) - ->update([ - $column => $fileId, - ]); - - // Set render data - $renderData['page'] = [ - 'redirect' => $redirect, - 'message' => 'Updated your ' . strtolower($msgTitle) . '!', - 'success' => 1, - ]; - break; - - // Fallback - default: - // Set render data - $renderData['page'] = [ - 'redirect' => $redirect, - 'message' => 'The requested method does not exist.', - 'success' => 0, - ]; - break; - - } - } - - // Print page contents or if the AJAX request is set only display the render data - if (isset($_REQUEST['ajax'])) { - echo $renderData['page']['message'] . '|' . - $renderData['page']['success'] . '|' . - $renderData['page']['redirect']; - } else { - // If not allowed print the restricted page - Template::vars($renderData); - - // Print page contents - echo Template::render('global/information'); - } - exit; -} - -if (ActiveUser::$user->id) { - // Settings page list - $pages = [ - 'general' => [ - 'title' => 'General', - 'modes' => [ - 'home' => [ - 'title' => 'Home', - 'description' => [ - 'Welcome to the Settings Panel. - From here you can monitor, view and update your profile and preferences.', - ], - 'access' => !$currentUser->permission(Site::DEACTIVATED), - 'menu' => true, - ], - 'profile' => [ - 'title' => 'Profile', - 'description' => [ - 'These are the external account links etc. - on your profile, shouldn\'t need any additional explanation for this one.', - ], - 'access' => $currentUser->permission(Site::ALTER_PROFILE), - 'menu' => true, - ], - 'options' => [ - 'title' => 'Options', - 'description' => [ - 'These are a few personalisation options for the site while you\'re logged in.', - ], - 'access' => !$currentUser->permission(Site::DEACTIVATED), - 'menu' => true, - ], - ], - ], - 'friends' => [ - 'title' => 'Friends', - 'modes' => [ - 'listing' => [ - 'title' => 'Listing', - 'description' => [ - 'Manage your friends.', - ], - 'access' => $currentUser->permission(Site::MANAGE_FRIENDS), - 'menu' => true, - ], - 'requests' => [ - 'title' => 'Requests', - 'description' => [ - 'Handle friend requests.', - ], - 'access' => $currentUser->permission(Site::MANAGE_FRIENDS), - 'menu' => true, - ], - ], - ], - 'notifications' => [ - 'title' => 'Notifications', - 'modes' => [ - 'history' => [ - 'title' => 'History', - 'description' => [ - 'The history of notifications that have been sent to you in the last month.', - ], - 'access' => !$currentUser->permission(Site::DEACTIVATED), - 'menu' => true, - ], - ], - ], - 'appearance' => [ - 'title' => 'Appearance', - 'modes' => [ - 'avatar' => [ - 'title' => 'Avatar', - 'description' => [ - 'Your avatar which is displayed all over the site and on your profile.', - 'Maximum image size is {{ avatar.max_width }}x{{ avatar.max_height }}, - minimum image size is {{ avatar.min_width }}x{{ avatar.min_height }}, - maximum file size is {{ avatar.max_size_view }}.', - ], - 'access' => $currentUser->permission(Site::CHANGE_AVATAR), - 'menu' => true, - ], - 'background' => [ - 'title' => 'Background', - 'description' => [ - 'The background that is displayed on your profile.', - 'Maximum image size is {{ background.max_width }}x{{ background.max_height }}, - minimum image size is {{ background.min_width }}x{{ background.min_height }}, - maximum file size is {{ background.max_size_view }}.', - ], - 'access' => $currentUser->permission(Site::CHANGE_BACKGROUND), - 'menu' => true, - ], - 'header' => [ - 'title' => 'Header', - 'description' => [ - 'The header that is displayed on your profile.', - 'Maximum image size is {{ header.max_width }}x{{ header.max_height }}, - minimum image size is {{ header.min_width }}x{{ header.min_height }}, - maximum file size is {{ header.max_size_view }}.', - ], - 'access' => $currentUser->permission(Site::CHANGE_HEADER), - 'menu' => true, - ], - 'userpage' => [ - 'title' => 'Userpage', - 'description' => [ - 'The custom text that is displayed on your profile.', - ], - 'access' => ( - $currentUser->page - && $currentUser->permission(Site::CHANGE_USERPAGE) - ) || $currentUser->permission(Site::CREATE_USERPAGE), - 'menu' => true, - ], - 'signature' => [ - 'title' => 'Signature', - 'description' => [ - 'This signature is displayed at the end of all your posts (unless you choose not to show it).', - ], - 'access' => $currentUser->permission(Site::CHANGE_SIGNATURE), - 'menu' => true, - ], - ], - ], - 'account' => [ - 'title' => 'Account', - 'modes' => [ - 'email' => [ - 'title' => 'E-mail address', - 'description' => [ - 'You e-mail address is used for password recovery and stuff like that, we won\'t spam you ;).', - ], - 'access' => $currentUser->permission(Site::CHANGE_EMAIL), - 'menu' => true, - ], - 'username' => [ - 'title' => 'Username', - 'description' => [ - 'Probably the biggest part of your identity on a site.', - 'You can only change this once every 30 days so choose wisely.', - ], - 'access' => $currentUser->permission(Site::CHANGE_USERNAME), - 'menu' => true, - ], - 'usertitle' => [ - 'title' => 'Title', - 'description' => [ - 'That little piece of text displayed under your username on your profile.', - ], - 'access' => $currentUser->permission(Site::CHANGE_USERTITLE), - 'menu' => true, - ], - 'password' => [ - 'title' => 'Password', - 'description' => [ - 'Used to authenticate with the site and certain related services.', - ], - 'access' => $currentUser->permission(Site::CHANGE_PASSWORD), - 'menu' => true, - ], - 'ranks' => [ - 'title' => 'Ranks', - 'description' => [ - 'Manage what ranks you\'re in and what is set as your main rank. - Your main rank is highlighted. - You get the permissions of all of the ranks you\'re in combined.', - ], - 'access' => $currentUser->permission(Site::ALTER_RANKS), - 'menu' => true, - ], - ], - ], - 'advanced' => [ - 'title' => 'Advanced', - 'modes' => [ - 'sessions' => [ - 'title' => 'Sessions', - 'description' => [ - 'Session keys are a way of identifying yourself with the system without keeping - your password in memory.', - 'If someone finds one of your session keys they could possibly compromise your account, - if you see any sessions here that shouldn\'t be here hit the Kill button to kill the - selected session.', - 'If you get logged out after clicking one you\'ve most likely killed your current session, - to make it easier to avoid this from happening your current session is highlighted.', - ], - 'access' => $currentUser->permission(Site::MANAGE_SESSIONS), - 'menu' => true, - ], - 'deactivate' => [ - 'title' => 'Deactivate', - 'description' => [ - 'You can deactivate your account here if you want to leave :(.', - ], - 'access' => $currentUser->permission(Site::DEACTIVATE_ACCOUNT), - 'menu' => true, - ], - ], - ], - ]; - - // Current settings page - $category = isset($_GET['cat']) ? ( - array_key_exists($_GET['cat'], $pages) ? $_GET['cat'] : false - ) : array_keys($pages)[0]; - $mode = false; - - // Only continue setting mode if $category is true - if ($category) { - $mode = isset($_GET['mode']) && $category ? ( - array_key_exists($_GET['mode'], $pages[$category]['modes']) ? $_GET['mode'] : false - ) : array_keys($pages[$category]['modes'])[0]; - } - - // Not found - if (!$category - || empty($category) - || !$mode - || empty($mode) - || !$pages[$category]['modes'][$mode]['access']) { - header('HTTP/1.0 404 Not Found'); - - // Set parse variables - Template::vars($renderData); - - // Print page contents - echo Template::render('global/notfound'); - exit; - } - - // Set templates directory - $renderData['templates'] = 'old-settings'; - - // Render data - $renderData['current'] = $category . '.' . $mode; - - // Settings pages - $renderData['pages'] = $pages; - - // Page data - $renderData['page'] = [ - 'category' => $pages[$category]['title'], - 'mode' => $pages[$category]['modes'][$mode]['title'], - 'description' => $pages[$category]['modes'][$mode]['description'], - ]; - - // Section specific - switch ($category . '.' . $mode) { - // Avatar and background sizes - case 'appearance.avatar': - case 'appearance.background': - case 'appearance.header': - $renderData[$mode] = [ - 'max_width' => Config::get($mode . '_max_width'), - 'max_height' => Config::get($mode . '_max_height'), - 'min_width' => Config::get($mode . '_min_width'), - 'min_height' => Config::get($mode . '_min_height'), - 'max_size' => Config::get($mode . '_max_fsize'), - 'max_size_view' => byte_symbol(Config::get($mode . '_max_fsize')), - ]; - break; - } - - // Set parse variables - Template::vars($renderData); - - // Print page contents - echo Template::render('meta/settings'); -} else { - // If not allowed print the restricted page - Template::vars($renderData); - - // Print page contents - echo Template::render('global/restricted'); -} diff --git a/sakura.php b/sakura.php index f7b7cf2..1cf32ee 100644 --- a/sakura.php +++ b/sakura.php @@ -92,9 +92,6 @@ ActiveUser::init( $_COOKIE[Config::get('cookie_prefix') . 'session'] ?? '' ); -// Create the Urls object -$urls = new Urls(); - if (!defined('SAKURA_NO_TPL')) { // Start templating engine Template::set(Config::get('site_style')); @@ -111,7 +108,6 @@ if (!defined('SAKURA_NO_TPL')) { ], $_SESSION), 'user' => ActiveUser::$user, - 'urls' => $urls, 'get' => $_GET, 'post' => $_POST, diff --git a/templates/yuuno/elements/settingsNav.twig b/templates/yuuno/elements/settingsNav.twig deleted file mode 100644 index 46f084f..0000000 --- a/templates/yuuno/elements/settingsNav.twig +++ /dev/null @@ -1,13 +0,0 @@ -
- Navigation -
-
- {% for catname,category in pages %} -
{{ category.title }}
- {% for mname,mode in category.modes %} - {% if mode.access and mode.menu %} - {{ mode.title }} - {% endif %} - {% endfor %} - {% endfor %} -
diff --git a/templates/yuuno/old-settings/appearance.avatar.twig b/templates/yuuno/old-settings/appearance.avatar.twig deleted file mode 100644 index 27cddb0..0000000 --- a/templates/yuuno/old-settings/appearance.avatar.twig +++ /dev/null @@ -1,20 +0,0 @@ -
- - - - -
-
- Your Avatar -
-
- -
- (Leave upload box empty to remove avatar) -
-
-
- -
-
-
diff --git a/templates/yuuno/old-settings/appearance.background.twig b/templates/yuuno/old-settings/appearance.background.twig deleted file mode 100644 index a7e474f..0000000 --- a/templates/yuuno/old-settings/appearance.background.twig +++ /dev/null @@ -1,24 +0,0 @@ -{% if user.permission(constant('Sakura\\Perms\\Site::CHANGE_BACKGROUND')) %} -
- - - - -
-
- Your Background -
-
- -
- (Leave upload box empty to remove background) -
-
-
- -
-
-
-{% else %} -

You do not have the permission to change your background.

-{% endif %} diff --git a/templates/yuuno/old-settings/appearance.header.twig b/templates/yuuno/old-settings/appearance.header.twig deleted file mode 100644 index 2efc9a5..0000000 --- a/templates/yuuno/old-settings/appearance.header.twig +++ /dev/null @@ -1,24 +0,0 @@ -{% if user.permission(constant('Sakura\\Perms\\Site::CHANGE_HEADER')) %} -
- - - - -
-
- Your Header -
-
- -
- (Leave upload box empty to remove header) -
-
-
- -
-
-
-{% else %} -

You do not have the permission to change your header.

-{% endif %}