r20151212

Signed-off-by: Flashwave <me@flash.moe>
This commit is contained in:
Pachira 2015-12-12 18:57:34 +01:00
parent cf33d8a059
commit 7da4685d89
53 changed files with 394 additions and 20548 deletions

View file

@ -41,7 +41,7 @@ class Permissions
'CHANGE_PASSWORD' => 16384, // Can change their password
'ALTER_RANKS' => 32768, // Can change their ranks
'MANAGE_SESSIONS' => 65536, // Can manage their sessions
'CREATE_REGKEYS' => 131072, // Can create registration keys
'CHANGE_SIGNATURE' => 131072, // User can change their signature
'DEACTIVATE_ACCOUNT' => 262144, // Can deactivate their account
'VIEW_PROFILE_DATA' => 524288, // Can view other's profile data
'MANAGE_FRIENDS' => 1048576, // Can manage friends (add/remove)
@ -55,7 +55,6 @@ class Permissions
'CREATE_COMMENTS' => 268435456, // User can make comments
'DELETE_COMMENTS' => 536870912, // User can delete own comments
'VOTE_COMMENTS' => 1073741824, // User can vote on comments
'CHANGE_SIGNATURE' => 2147483648, // User can vote on comments
],
// Site management permissions

View file

@ -1,587 +0,0 @@
/*!
* Bootstrap v3.3.5 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-default.disabled,
.btn-primary.disabled,
.btn-success.disabled,
.btn-info.disabled,
.btn-warning.disabled,
.btn-danger.disabled,
.btn-default[disabled],
.btn-primary[disabled],
.btn-success[disabled],
.btn-info[disabled],
.btn-warning[disabled],
.btn-danger[disabled],
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-danger {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-default .badge,
.btn-primary .badge,
.btn-success .badge,
.btn-info .badge,
.btn-warning .badge,
.btn-danger .badge {
text-shadow: none;
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #e0e0e0;
background-image: none;
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #265a88;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #265a88;
border-color: #245580;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #265a88;
background-image: none;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
background-color: #419641;
background-image: none;
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
background-color: #2aabd2;
background-image: none;
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
background-color: #eb9316;
background-image: none;
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
background-color: #c12e2a;
background-image: none;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #2e6da4;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
@media (max-width: 767px) {
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #286090;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
border-color: #2b669a;
}
.list-group-item.active .badge,
.list-group-item.active:hover .badge,
.list-group-item.active:focus .badge {
text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */

File diff suppressed because it is too large Load diff

View file

@ -1,9 +0,0 @@
/*
* Broomcloset bootstrap extension thing
* By Flashwave <https://flash.moe>
*/
.main {
margin: -40px auto 0;
max-width: 1280px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

File diff suppressed because it is too large Load diff

View file

@ -1,114 +0,0 @@
/*
* Broom Closet
*/
@charset "utf-8";
/* Standard Elements */
* {
/* Reset margin and padding */
margin: 0;
padding: 0;
}
html {
width: 100%;
height: 100%;
}
body {
font: 12px/20px "Segoe UI", sans-serif;
background: #EEE;
color: #000;
height: 100%;
position: relative;
width: 100%;
}
#container {
min-height: 100%;
position: relative;
width: 100%;
}
.clear {
clear: both !important;
float: none !important;
}
.hidden {
display: none !important;
visibility: hidden !important;
}
a {
color: #22E;
text-decoration: none;
}
a:hover {
color: #22E;
text-decoration: underline;
}
a:active {
color: #E22;
}
/* Page header */
.header {
background: #222;
color: #FFF;
margin-bottom: 10px;
box-shadow: 0 0 1em #222;
}
.header > .logo {
font-size: 3em;
line-height: 1.7em;
margin: 0 20px;
display: inline-block;
}
.header > .logo > a {
color: inherit !important;
text-decoration: none !important;
}
.header > .nav {
padding: 0 0 10px 10px;
font-size: 1.3em;
line-height: 1.4em;
cursor: default;
}
.header > .nav > div > * {
display: inline-block;
}
.header > .nav > div > div {
min-width: 160px;
}
.header > .nav > div > a {
color: #DDD;
text-decoration: none !important;
padding: 0 5px 2px;
transition: .2s;
}
.header > .nav > div > a:hover {
background: #333;
}
.header > .nav > div > a:active {
text-shadow: 0 0 1em #F1F1F1;
}
/* Page footer */
.footer {
background: #222;
text-align: center;
padding-top: 1px;
margin-top: 10px;
box-shadow: 0 0 1em #222;
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
/* Page content */
#contentwrapper {
padding-bottom: 50px;
}

View file

@ -20,7 +20,7 @@ function notifyUI(content) {
alert.className = 'notification-enter';
alert.id = id;
// Add the icon
if ((typeof content.img).toLowerCase() === 'undefined' && content.img == null && !(content.img.length > 1)) {
if ((typeof content.img).toLowerCase() === 'undefined' || content.img == null || content.img.length < 2) {
aIconCont = document.createElement('div');
aIconCont.className = 'font-icon fa fa-info fa-4x';
}
@ -31,7 +31,7 @@ function notifyUI(content) {
else {
aIconCont = document.createElement('img');
aIconCont.alt = id;
aIconCont.img = content.img;
aIconCont.src = content.img;
}
aIcon.appendChild(aIconCont);
aIcon.className = 'notification-icon';
@ -67,8 +67,8 @@ function notifyUI(content) {
// Assign attribs
mp3.type = 'audio/mp3';
ogg.type = 'audio/ogg';
mp3.src = sakuraVars.content_path + '/sounds/notify.mp3';
ogg.src = sakuraVars.content_path + '/sounds/notify.ogg';
mp3.src = sakuraVars.content + '/sounds/notify.mp3';
ogg.src = sakuraVars.content + '/sounds/notify.ogg';
// Append
sound.appendChild(mp3);
sound.appendChild(ogg);

View file

@ -35,7 +35,7 @@ function notifyUI(content: Notification): void {
alert.id = id;
// Add the icon
if ((typeof content.img).toLowerCase() === 'undefined' && content.img == null && !(content.img.length > 1)) {
if ((typeof content.img).toLowerCase() === 'undefined' || content.img == null || content.img.length < 2) {
aIconCont = document.createElement('div');
aIconCont.className = 'font-icon fa fa-info fa-4x';
} else if (content.img.substr(0, 5) == 'FONT:') {
@ -44,7 +44,7 @@ function notifyUI(content: Notification): void {
} else {
aIconCont = document.createElement('img');
aIconCont.alt = id;
aIconCont.img = content.img;
aIconCont.src = content.img;
}
aIcon.appendChild(aIconCont);
@ -88,8 +88,8 @@ function notifyUI(content: Notification): void {
// Assign attribs
mp3.type = 'audio/mp3';
ogg.type = 'audio/ogg';
mp3.src = sakuraVars.content_path + '/sounds/notify.mp3';
ogg.src = sakuraVars.content_path + '/sounds/notify.ogg';
mp3.src = sakuraVars.content + '/sounds/notify.mp3';
ogg.src = sakuraVars.content + '/sounds/notify.ogg';
// Append
sound.appendChild(mp3);

5
public/content/libraries/d3.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -12,78 +12,305 @@ define('SAKURA_MANAGE', true);
// Include components
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
// Make sure user has the permissions to view this
if (!$currentUser->checkPermission('MANAGE', 'USE_MANAGE')) {
header('Location: /');
exit;
}
// Modes
$modes = [
'dashboard' => [
'index',
],
'configuration' => [
'general',
'security',
'authentication',
'appearance',
'performance',
],
'logs' => [
'errors',
],
'error' => [
'index',
],
];
// Select mode
$category = isset($_GET['cat'])
? (
array_key_exists($_GET['cat'], $modes) ?
$_GET['cat'] :
'error'
)
: key($modes);
$mode = isset($_GET['mode'])
? (
in_array($_GET['mode'], $modes[$category]) ?
$_GET['mode'] :
'error'
)
: $modes[$category][0];
// Override category if mode is error
if ($mode == 'error') {
$category = 'error';
$mode = $modes[$category][0];
}
// Set page data
$renderData = array_merge($renderData, [
'manage' => [
'category' => $category,
'mode' => $mode,
],
]);
// Add special variables
switch ($category . '.' . $mode) {
case 'logs.errors':
$errorLog = Database::fetch('error_log', true, null, ['error_id', true]);
$renderData = array_merge($renderData, ['errors' => $errorLog]);
break;
}
// Initialise templating engine
$template = new Template();
// Change templating engine
$template->setTemplate($templateName);
// Make sure user has the permissions to view this
if (!$currentUser->checkPermission('MANAGE', 'USE_MANAGE')) {
// Set parse variables
$template->setVariables($renderData);
// Print page contents
echo $template->render('pages/' . $category . '/' . $mode);
echo $template->render('global/restricted');
exit;
}
// Modes
$pages = [
'general' => [
'title' => 'General',
'modes' => [
'dashboard' => [
'title' => 'Dashboard',
'description' => [
'Welcome to the Broomcloset! Here\'s a quick overview of the site.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'info' => [
'title' => 'Info pages',
'description' => [
'Manage and edit the info pages.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
],
],
'config' => [
'title' => 'Configuration',
'modes' => [
'general' => [
'title' => 'General',
'description' => [
'Manages the appearance of the site and most other options that don\'t need their own category.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'uploads' => [
'title' => 'Uploads',
'description' => [
'Settings regarding uploads like avatars and backgrounds.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'premium' => [
'title' => 'Premium',
'description' => [
'Alters the way the premium system works.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'user' => [
'title' => 'User',
'description' => [
'Settings regarding users such as registration.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'mail' => [
'title' => 'Mail',
'description' => [
'How will Sakura send e-mails.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
],
],
'forums' => [
'title' => 'Forums',
'modes' => [
'manage' => [
'title' => 'Manage',
'description' => [
'Change the forums.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'settings' => [
'title' => 'Settings',
'description' => [
'Alter settings specific to the forum.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
],
],
'comments' => [
'title' => 'Comments',
'modes' => [
'manage' => [
'title' => 'Manage',
'description' => [
'View all the comment categories.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
],
],
'users' => [
'title' => 'Users',
'modes' => [
'manage-users' => [
'title' => 'Manage users',
'description' => [
'View and change users.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'manage-ranks' => [
'title' => 'Manage ranks',
'description' => [
'View and change ranks.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'profile-fields' => [
'title' => 'Profile fields',
'description' => [
'Manage the custom profile fields.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'option-fields' => [
'title' => 'Option fields',
'description' => [
'Manage the custom option fields.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'bans' => [
'title' => 'Bans',
'description' => [
'Banning users.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'warnings' => [
'title' => 'Warnings',
'description' => [
'Warn users.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
],
],
'permissions' => [
'title' => 'Permissions',
'modes' => [
'site' => [
'title' => 'Manage site',
'description' => [
'Alter the global site perms.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'management' => [
'title' => 'Manage management',
'description' => [
'Alter the management/moderation perms.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'forum' => [
'title' => 'Manage forums',
'description' => [
'Alter the perms of the forums.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
],
],
'logs' => [
'title' => 'Logs',
'modes' => [
'actions' => [
'title' => 'Actions',
'description' => [
'Viewing the global action logs.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'management' => [
'title' => 'Management',
'description' => [
'Viewing the management actions taken by staff.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'menu' => true,
],
'errors' => [
'title' => 'Errors',
'description' => [
'Viewing the PHP error logs Sakura was able to log.',
],
'access' => !$currentUser->checkPermission('SITE', 'DEACTIVATED'),
'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->setVariables($renderData);
// Print page contents
echo $template->render('global/notfound');
exit;
}
// Set templates directory
$renderData['templates'] = 'manage';
// 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'],
];
// Add special variables
switch ($category . '.' . $mode) {
case 'general.dashboard':
$renderData = array_merge($renderData, [
'stats' => [
'postcount' => Database::count('posts')[0],
'threadcount' => Database::count('topics')[0],
'commentcount' => Database::count('comments')[0],
'userscount' => Database::count('users')[0],
'bancount' => Database::count('bans')[0],
'uploadcount' => count(glob(ROOT . Config::get('user_uploads') . '/*')) - 1,
],
]);
break;
case 'logs.errors':
$errorLog = Database::fetch('error_log', true, null, ['error_id', true]);
$renderData = array_merge($renderData, ['errors' => $errorLog]);
break;
}
// Set parse variables
$template->setVariables($renderData);
// Print page contents
echo $template->render('main/settings');

View file

@ -1262,16 +1262,6 @@ if (Users::checkLogin()) {
'access' => $currentUser->checkPermission('SITE', 'MANAGE_SESSIONS'),
'menu' => true,
],
'registrationkeys' => [
'title' => 'Registration Keys',
'description' => [
'Sometimes we activate the registration key system which means that users can only
register using your "referer" keys,this means we can keep unwanted people from registering.',
'Each user can generate 5 of these keys, bans and deactivates render these keys useless.',
],
'access' => $currentUser->checkPermission('SITE', 'CREATE_REGKEYS'),
'menu' => true,
],
'deactivate' => [
'title' => 'Deactivate Account',
'description' => [
@ -1313,6 +1303,9 @@ if (Users::checkLogin()) {
exit;
}
// Set templates directory
$renderData['templates'] = 'settings';
// Render data
$renderData['current'] = $category . '.' . $mode;

View file

@ -8,7 +8,7 @@
namespace Sakura;
// Define Sakura version
define('SAKURA_VERSION', '20151211');
define('SAKURA_VERSION', '20151212');
define('SAKURA_VLABEL', 'Eminence');
define('SAKURA_COLOUR', '#6C3082');
@ -111,13 +111,10 @@ $urls = new Urls();
// Prepare the name of the template to load (outside of SAKURA_NO_TPL because it's used in imageserve.php)
$templateName =
defined('SAKURA_MANAGE') ?
Config::get('manage_style') :
(
isset($currentUser->optionFields()['useMisaki']) && $currentUser->optionFields()['useMisaki'] ?
'misaki' :
Config::get('site_style')
);
!defined('SAKURA_MANAGE')
&& isset($currentUser->optionFields()['useMisaki'])
&& $currentUser->optionFields()['useMisaki'] ?
'misaki' : Config::get('site_style');
if (!defined('SAKURA_NO_TPL')) {
// Set base page rendering data

View file

@ -1,106 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<!-- META -->
<meta charset="{{ sakura.charset }}" />
<title>{% block title %}{{ sakura.siteName }}{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
{% if page.redirect %}
<meta http-equiv="refresh" content="{{ page.redirectTimeout ? page.redirectTimeout : '3' }}; URL={{ page.redirect }}" />
{% endif %}
{{ block('meta') }}
<!-- CSS -->
<link rel="stylesheet" type="text/css" href="{{ sakura.resources }}/css/broomcloset.css" />
<link rel="stylesheet" type="text/css" href="{{ sakura.resources }}/css/bootstrap.css" />
<link rel="stylesheet" type="text/css" href="{{ sakura.resources }}/css/bootstrap-theme.css" />
<link rel="stylesheet" type="text/css" href="{{ sakura.contentPath }}/fonts/font-awesome/font.css" />
{{ block('css') }}
<!-- JS -->
<script type="text/javascript" charset="utf-8" src="{{ sakura.contentPath }}/libraries/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="{{ sakura.resources }}/js/bootstrap.js"></script>
{{ block('js') }}
</head>
<body>
<nav class="navbar navbar-inverse navbar-static-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{ urls.format('MANAGE_INDEX') }}">The Broomcloset</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-left">
<li{% if manage.category == 'dashboard' %} class="active"{% endif %}><a href="{{ urls.format('MANAGE_INDEX') }}">Dashboard</a></li>
<li{% if manage.category == 'news' %} class="active"{% endif %}><a href="{{ urls.format('MANAGE_CAT', ['news']) }}">News</a></li>
<li class="dropdown{% if manage.category == 'configuration' %} active{% endif %}">
<a href="javascript:void(0);" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Configuration <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ urls.format('MANAGE_MODE', ['configuration', 'general']) }}">General</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['configuration', 'security']) }}">Security</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['configuration', 'authentication']) }}">Authentication</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['configuration', 'appearance']) }}">Appearance</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['configuration', 'performance']) }}">Performance</a></li>
</ul>
</li>
<li{% if manage.category == 'reports' %} class="active"{% endif %}><a href="{{ urls.format('MANAGE_CAT', ['reports']) }}">Reports</a></li>
<li{% if manage.category == 'infopages' %} class="active"{% endif %}><a href="{{ urls.format('MANAGE_CAT', ['infopages']) }}">Info pages</a></li>
<li class="dropdown{% if manage.category == 'users' %} active{% endif %}">
<a href="javascript:void(0);" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Users <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ urls.format('MANAGE_MODE', ['users', 'manage']) }}">Manage users</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['users', 'ranks']) }}">Manage ranks</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['users', 'groups']) }}">Manage groups</a></li>
<li role="separator" class="divider"></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['users', 'warnings']) }}">Warnings</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['users', 'bans']) }}">Bans</a></li>
</ul>
</li>
<li class="dropdown{% if manage.category == 'forums' %} active{% endif %}">
<a href="javascript:void(0);" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Forums <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ urls.format('MANAGE_MODE', ['forums', 'manage']) }}">Manage forums</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['forums', 'moderate']) }}">Moderate forums</a></li>
</ul>
</li>
<li class="dropdown{% if manage.category == 'permissions' %} active{% endif %}">
<a href="javascript:void(0);" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Permissions <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ urls.format('MANAGE_MODE', ['permissions', 'global']) }}">Global permissions</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['permissions', 'forums']) }}">Forum permissions</a></li>
</ul>
</li>
<li class="dropdown{% if manage.category == 'logs' %} active{% endif %}">
<a href="javascript:void(0);" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Logs <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ urls.format('MANAGE_MODE', ['logs', 'all']) }}">Full log</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['logs', 'management']) }}">Management logs</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['logs', 'errors']) }}">Error logs</a></li>
<li><a href="{{ urls.format('MANAGE_MODE', ['logs', 'user']) }}">User logs</a></li>
</ul>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" style="color: {{ user.colour }};">{{ user.username }} <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ urls.format('USER_PROFILE', [user.id]) }}">View Profile</a></li>
<li><a href="{{ urls.format('SETTINGS_INDEX') }}">Site settings</a></li>
<li role="separator" class="divider"></li>
<li><a href="{{ urls.format('SITE_HOME') }}">Back to site</a></li>
<li><a href="{{ urls.format('USER_LOGOUT', [php.time, php.sessionid, urls.format('SITE_HOME')]) }}">Logout</a></li>
</ul>
</li>
<li><a href="https://sakura.flash.moe/#r{{ sakura.versionInfo.version }}" style="color: {{ sakura.versionInfo.colour }};" title="{{ sakura.versionInfo.label }} {{ sakura.versionInfo.stable ? 'Stable' : 'Development' }}">Sakura r{{ sakura.versionInfo.version }}</a></li>
</ul>
</div>
</div>
</nav>
<div class="container-fluid">
{{ block('content') }}
</div>
</body>
</html>

View file

@ -1,10 +0,0 @@
{% extends 'global/master.tpl' %}
{% block title %}Restricted{% endblock %}
{% block content %}
<div class="main">
<h1 class="page-header">Restricted</h1>
<p class="lead">You are not allowed to manage this site.</p>
</div>
{% endblock %}

View file

@ -1,15 +0,0 @@
{% extends 'global/master.tpl' %}
{% block title %}Configuration{% endblock %}
{% block content %}
<div class="main">
<h1 class="page-header"><small>Configuration /</small> General</h1>
<div class="panel panel-default">
<div class="panel-heading">Windows XPs</div>
<div class="panel-body">
and Windows XP Accessories
</div>
</div>
</div>
{% endblock %}

View file

@ -1,30 +0,0 @@
{% extends 'global/master.tpl' %}
{% block title %}Dashboard{% endblock %}
{% block content %}
<div class="main">
<h1 class="page-header">Dashboard <small>A quick overview of everything</small></h1>
<h3>Reports <small>The five newest unsolved reports</small></h3>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Subject</th>
<th>User reported</th>
<th>Reporter</th>
<th>Report time</th>
</tr>
</thead>
<tbody>
<tr>
<td>Faggot exists really</td>
<td>Nippon Nick
</td>
<td>Japan Joe</td>
<td>1969-69-69 69:69:69 JST</td>
</tr>
</tbody>
</table>
<h3>Statistics <small>The site in numbers</small></h3>
</div>
{% endblock %}

View file

@ -1,10 +0,0 @@
{% extends 'global/master.tpl' %}
{% block title %}Not found{% endblock %}
{% block content %}
<div class="main">
<h1 class="page-header">404 <small>Page not found</small></h1>
<p class="lead">The page you requested doesn't exist.</p>
</div>
{% endblock %}

View file

@ -1,44 +0,0 @@
{% extends 'global/master.tpl' %}
{% block title %}Error Log{% endblock %}
{% block js %}
<script type="text/javascript">
var backtraces = document.querySelectorAll('.backtrace');
for (var i in backtraces) {
backtraces[i].innerHTML = atob(backtraces[i].innerHTML);
}
</script>
{% endblock %}
{% block content %}
<div class="main">
<h1 class="page-header">Error Log <small>A log of server side errors that Sakura could catch</small></h1>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>ID</th>
<th>Occurred</th>
<th>Revision</th>
<th>Type</th>
<th>Line</th>
<th>String</th>
<th>File</th>
</tr>
</thead>
<tbody>
{% for error in errors %}
<tr>
<td>{{ error.error_id }}</td>
<td>{{ error.error_timestamp }}</td>
<td>{{ error.error_revision }}</td>
<td>{{ error.error_type }}</td>
<td>{{ error.error_line }}</td>
<td>{{ error.error_string }}</td>
<td>{{ error.error_file }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}

View file

@ -1,14 +0,0 @@
; Sakura Template Configuration
[meta]
; Display name of the style, only used in the admin section of the management panel.
name = Broomcloset
; Author of this template.
author = Flashwave
; If you set a URL below your name becomes a clickable link in the management panel.
author_url = https://flash.moe
[manage]
; This defines whether the template is intended for the management panel.
; When it's incorrect Sakura will halt execution of the script.
mode = 1

View file

@ -6,7 +6,7 @@
<div>{{ category.title }}</div>
{% for mname,mode in category.modes %}
{% if mode.access and mode.menu %}
<a href="{{ urls.format('SETTING_MODE', [catname, mname]) }}">{{ mode.title }}</a>
<a href="{{ urls.format(templates == 'settings' ? 'SETTING_MODE' : 'MANAGE_MODE', [catname, mname]) }}">{{ mode.title }}</a>
{% endif %}
{% endfor %}
{% endfor %}

View file

@ -16,7 +16,7 @@
<div>{{ include(template_from_string(descline)) }}</div>
{% endfor %}
</div>
{% include 'settings/' ~ current ~ '.tpl' %}
{% include templates ~ '/' ~ current ~ '.tpl' %}
</div>
<div class="clear"></div>
</div>

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1,57 @@
<h1 class="stylised">Statistics</h1>
<table class="settings-table">
<thead>
<tr><th>Statistic</th><th>Value</th><th>Statistic</th><th>Value</th></tr>
</thead>
<tbody>
<tr>
<td>Number of posts</td>
<td>{{ stats.postcount }}</td>
<td>Number of users</td>
<td>{{ stats.userscount }}</td>
</tr>
<tr>
<td>Posts per day</td>
<td>x</td>
<td>Users per day</td>
<td>x</td>
</tr>
<tr>
<td>Number of threads</td>
<td>{{ stats.threadcount }}</td>
<td>Number of bans</td>
<td>{{ stats.bancount }}</td>
</tr>
<tr>
<td>Threads per day</td>
<td>x</td>
<td>Bans per day</td>
<td>x</td>
</tr>
<tr>
<td>Number of comments</td>
<td>{{ stats.commentcount }}</td>
<td>Number of uploads</td>
<td>{{ stats.uploadcount }}</td>
</tr>
<tr>
<td>Comments per day</td>
<td>x</td>
<td>Size of uploads</td>
<td>x</td>
</tr>
</tbody>
</table><br />
<h1 class="stylised">Most recent reports</h1>
<table class="settings-table">
<thead>
<tr><th>Reporter</th><th>Action</th><th>When</th><th></th></tr>
</thead>
<tbody>
<tr><td>Nippon Nick</td><td>User: Japan Joe</td><td>2000 years ago on cybernetics</td><td style="width: 70px;"><a href="#" class="default">View</a></td></tr>
<tr><td>Sam Hyde</td><td>Post: bug sports a shit</td><td>4000 years ago on knuckleste.co.uk</td><td style="width: 70px;"><a href="#" class="default">View</a></td></tr>
</tbody>
</table><br />
<h1 class="stylised">Most recent actions</h1>
<br />
<h1 class="stylised">Most recent moderation actions</h1>

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />

View file

@ -0,0 +1 @@
<br />