big commit
This commit is contained in:
parent
ef45c2668d
commit
6bb9643df1
36 changed files with 1882 additions and 1612 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -42,10 +42,8 @@ local.properties
|
||||||
|
|
||||||
errors.log
|
errors.log
|
||||||
_sakura/config/config.ini
|
_sakura/config/config.ini
|
||||||
content/images/avatars/*
|
content/images/user/*
|
||||||
!content/images/avatars/.htaccess
|
!content/images/user/.htaccess
|
||||||
content/images/backgrounds/*
|
|
||||||
!content/images/backgrounds/.htaccess
|
|
||||||
BingSiteAuth.xml
|
BingSiteAuth.xml
|
||||||
google*.html
|
google*.html
|
||||||
main/logs/*
|
main/logs/*
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Disallow external connections
|
||||||
|
|
||||||
|
# Apache <= 2.2
|
||||||
|
<IfModule !mod_authz_core.c>
|
||||||
|
Order deny,allow
|
||||||
|
deny from all
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Apache 2.4 =>
|
||||||
|
<IfModule mod_authz_core.c>
|
||||||
|
Require all denied
|
||||||
|
</IfModule>
|
13
_sakura/cache/.htaccess
vendored
Normal file → Executable file
13
_sakura/cache/.htaccess
vendored
Normal file → Executable file
|
@ -1,12 +1 @@
|
||||||
# Disallow external connections
|
#
|
||||||
|
|
||||||
# Apache <= 2.2
|
|
||||||
<IfModule !mod_authz_core.c>
|
|
||||||
Order deny,allow
|
|
||||||
deny from all
|
|
||||||
</IfModule>
|
|
||||||
|
|
||||||
# Apache 2.4 =>
|
|
||||||
<IfModule mod_authz_core.c>
|
|
||||||
Require all denied
|
|
||||||
</IfModule>
|
|
||||||
|
|
|
@ -16,7 +16,10 @@
|
||||||
"20150524",
|
"20150524",
|
||||||
"20150525",
|
"20150525",
|
||||||
"20150526",
|
"20150526",
|
||||||
"20150529"
|
"20150529",
|
||||||
|
"20150530",
|
||||||
|
"20150602",
|
||||||
|
"20150604"
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1205,6 +1208,49 @@
|
||||||
"change": "Added permission checking functions."
|
"change": "Added permission checking functions."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
"20150530": [
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"change": "Compress Yuuno back to one CSS file again."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "UPD",
|
||||||
|
"change": "Added configuration option to enable template caching."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIX",
|
||||||
|
"change": "Fixed logged out users inherit permission strings from random user groups."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIX",
|
||||||
|
"change": "Removed old deactivation checking method."
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
"20150602": [
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"change": "Added JSON indentation/pretty printing function."
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
"20150604": [
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "UPD",
|
||||||
|
"change": "Redid some of the users table structure."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"change": "Add /header to profile for spooky things."
|
||||||
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
|
|
||||||
namespace Sakura;
|
namespace Sakura;
|
||||||
|
|
||||||
|
use Parsedown;
|
||||||
|
use PHPMailer;
|
||||||
|
|
||||||
class Main {
|
class Main {
|
||||||
|
|
||||||
public static $_MD; // Markdown class container
|
public static $_MD; // Markdown class container
|
||||||
|
@ -46,7 +49,7 @@ class Main {
|
||||||
// Initialise Parsedown
|
// Initialise Parsedown
|
||||||
private static function initMD() {
|
private static function initMD() {
|
||||||
|
|
||||||
self::$_MD = new \Parsedown();
|
self::$_MD = new Parsedown();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +68,7 @@ class Main {
|
||||||
|
|
||||||
// In the highly unlikely case that it failed to get anything forge a false
|
// In the highly unlikely case that it failed to get anything forge a false
|
||||||
if(!$resp)
|
if(!$resp)
|
||||||
return array('success' => false, 'error-codes' => array('Could not connect to the ReCAPTCHA server.'));
|
return false;
|
||||||
|
|
||||||
// Decode the response JSON from the servers
|
// Decode the response JSON from the servers
|
||||||
$resp = json_decode($resp, true);
|
$resp = json_decode($resp, true);
|
||||||
|
@ -124,7 +127,7 @@ class Main {
|
||||||
public static function sendMail($to, $subject, $body) {
|
public static function sendMail($to, $subject, $body) {
|
||||||
|
|
||||||
// Initialise PHPMailer
|
// Initialise PHPMailer
|
||||||
$mail = new \PHPMailer();
|
$mail = new PHPMailer();
|
||||||
|
|
||||||
// Set to SMTP
|
// Set to SMTP
|
||||||
$mail->IsSMTP();
|
$mail->IsSMTP();
|
||||||
|
@ -556,17 +559,94 @@ class Main {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert a number to a hexadecimal value
|
// Indent JSON
|
||||||
public static function toHex($num) {
|
public static function jsonIndent($json) {
|
||||||
|
|
||||||
// Convert $num to an int if not yet
|
// Defines
|
||||||
$num = intval($num);
|
$tab = ' ';
|
||||||
|
$out = '';
|
||||||
|
$lvl = 0;
|
||||||
|
$str = false;
|
||||||
|
$obj = json_decode($json);
|
||||||
|
|
||||||
// Check if it's within the proper range
|
// Validate the object
|
||||||
if($num < 0 || $num > 255)
|
if($obj === false)
|
||||||
return 00;
|
return false;
|
||||||
|
|
||||||
|
// Re-encode the json and get the length
|
||||||
|
$json = json_encode($obj);
|
||||||
|
$len = strlen($json);
|
||||||
|
|
||||||
|
// Go over the entries
|
||||||
|
for($c = 0; $c < $len; $c++) {
|
||||||
|
|
||||||
|
// Get the current character
|
||||||
|
$char = $json[$c];
|
||||||
|
|
||||||
|
switch($char) {
|
||||||
|
|
||||||
|
case '[':
|
||||||
|
case '{':
|
||||||
|
if($str) {
|
||||||
|
|
||||||
|
$out .= $char;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$out .= $char ."\r\n". str_repeat($tab, $lvl + 1);
|
||||||
|
$lvl++;
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ']':
|
||||||
|
case '}':
|
||||||
|
if($str) {
|
||||||
|
|
||||||
|
$out .= $char;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$lvl--;
|
||||||
|
$out .= "\r\n". str_repeat($tab, $lvl) . $char;
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ',':
|
||||||
|
if($str) {
|
||||||
|
|
||||||
|
$out .= $char;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$out .= ",\r\n". str_repeat($tab, $lvl);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ':':
|
||||||
|
if($str) {
|
||||||
|
|
||||||
|
$out .= $char;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$out .= ": ";
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$out .= $char;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the indented JSON
|
||||||
|
return $out;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,18 @@ namespace Sakura;
|
||||||
|
|
||||||
class Permissions {
|
class Permissions {
|
||||||
|
|
||||||
|
// Fallback permission data
|
||||||
|
private static $fallback = [
|
||||||
|
|
||||||
|
'rid' => 0,
|
||||||
|
'uid' => 0,
|
||||||
|
'siteperms' => '000000000000000000000000001',
|
||||||
|
'manageperms' => '0',
|
||||||
|
'forumperms' => '0',
|
||||||
|
'rankinherit' => '111'
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
// Global permissions table
|
// Global permissions table
|
||||||
protected static $permissions = [
|
protected static $permissions = [
|
||||||
|
|
||||||
|
@ -60,14 +72,20 @@ class Permissions {
|
||||||
];
|
];
|
||||||
|
|
||||||
// Checking if a user has the permissions to do a thing
|
// Checking if a user has the permissions to do a thing
|
||||||
public static function check($layer, $action, $perm) {
|
public static function check($layer, $action, $operator, $mode = 0) {
|
||||||
|
|
||||||
// Check if the permission layer and the permission itself exists
|
// Check if the permission layer and the permission itself exists
|
||||||
if(!array_key_exists($layer, self::$permissions) || !array_key_exists($action, self::$permission[$layer]))
|
if(!array_key_exists($layer, self::$permissions) || !array_key_exists($action, self::$permissions[$layer]))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// Convert to the appropiate mode
|
||||||
|
if($mode === 2)
|
||||||
|
$operator = self::getRankPermissions($operator)[$layer];
|
||||||
|
elseif($mode === 1)
|
||||||
|
$operator = self::getUserPermissions($operator)[$layer];
|
||||||
|
|
||||||
// Perform the bitwise AND
|
// Perform the bitwise AND
|
||||||
if((bindec($perm) & self::$permission[$layer][$action]) != 0)
|
if(bindec($operator) & self::$permissions[$layer][$action])
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Else just return false
|
// Else just return false
|
||||||
|
@ -86,6 +104,10 @@ class Permissions {
|
||||||
foreach($ranks as $rank)
|
foreach($ranks as $rank)
|
||||||
$getRanks[] = Database::fetch('permissions', false, ['rid' => [$rank, '='], 'uid' => [0 ,'=']]);
|
$getRanks[] = Database::fetch('permissions', false, ['rid' => [$rank, '='], 'uid' => [0 ,'=']]);
|
||||||
|
|
||||||
|
// Check if getRanks is empty or if the rank id is 0 return the fallback
|
||||||
|
if(empty($getRanks) || in_array(0, $ranks))
|
||||||
|
$getRanks = [self::$fallback];
|
||||||
|
|
||||||
// Go over the permission data
|
// Go over the permission data
|
||||||
foreach($getRanks as $rank) {
|
foreach($getRanks as $rank) {
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,10 @@
|
||||||
|
|
||||||
namespace Sakura;
|
namespace Sakura;
|
||||||
|
|
||||||
|
use Twig_Loader_Filesystem;
|
||||||
|
use Twig_Environment;
|
||||||
|
use Twig_Extension_StringLoader;
|
||||||
|
|
||||||
class Templates {
|
class Templates {
|
||||||
|
|
||||||
// Engine container, template folder name and options
|
// Engine container, template folder name and options
|
||||||
|
@ -41,17 +45,20 @@ class Templates {
|
||||||
private static function twigLoader() {
|
private static function twigLoader() {
|
||||||
|
|
||||||
// Initialise Twig Filesystem Loader
|
// Initialise Twig Filesystem Loader
|
||||||
$twigLoader = new \Twig_Loader_Filesystem(ROOT .'_sakura/templates/'. self::$_TPL);
|
$twigLoader = new Twig_Loader_Filesystem(ROOT .'_sakura/templates/'. self::$_TPL);
|
||||||
|
|
||||||
|
// Environment variable
|
||||||
|
$twigEnv = [];
|
||||||
|
|
||||||
|
// Enable caching
|
||||||
|
if(Configuration::getConfig('enable_tpl_cache'))
|
||||||
|
$twigEnv['cache'] = ROOT .'_sakura/cache';
|
||||||
|
|
||||||
// And now actually initialise the templating engine
|
// And now actually initialise the templating engine
|
||||||
self::$_ENG = new \Twig_Environment($twigLoader, array(
|
self::$_ENG = new Twig_Environment($twigLoader, $twigEnv);
|
||||||
|
|
||||||
// 'cache' => SATOKO_ROOT_DIRECTORY. self::getConfig('path', 'cache') // Set cache directory
|
|
||||||
|
|
||||||
));
|
|
||||||
|
|
||||||
// Load String template loader
|
// Load String template loader
|
||||||
self::$_ENG->addExtension(new \Twig_Extension_StringLoader());
|
self::$_ENG->addExtension(new Twig_Extension_StringLoader());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,16 +25,13 @@ class Users {
|
||||||
'register_ip' => '127.0.0.1',
|
'register_ip' => '127.0.0.1',
|
||||||
'last_ip' => '127.0.0.1',
|
'last_ip' => '127.0.0.1',
|
||||||
'usertitle' => 'Internal fallback account',
|
'usertitle' => 'Internal fallback account',
|
||||||
'profile_md' => '',
|
|
||||||
'avatar_url' => '',
|
|
||||||
'background_url' => '',
|
|
||||||
'regdate' => 0,
|
'regdate' => 0,
|
||||||
'lastdate' => 0,
|
'lastdate' => 0,
|
||||||
'lastunamechange' => 0,
|
'lastunamechange' => 0,
|
||||||
'birthday' => '',
|
'birthday' => '',
|
||||||
'posts' => 0,
|
'posts' => 0,
|
||||||
'country' => 'EU',
|
'country' => 'EU',
|
||||||
'profile_data' => '[]'
|
'userData' => '[]'
|
||||||
];
|
];
|
||||||
|
|
||||||
// Empty rank template
|
// Empty rank template
|
||||||
|
@ -71,6 +68,10 @@ class Users {
|
||||||
if(!$session = Session::checkSession($uid, $sid))
|
if(!$session = Session::checkSession($uid, $sid))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// Check if the user is activated
|
||||||
|
if(Permissions::check('SITE', 'DEACTIVATED', $uid, 1))
|
||||||
|
return false;
|
||||||
|
|
||||||
// Extend the cookie times if the remember flag is set
|
// Extend the cookie times if the remember flag is set
|
||||||
if($session == 2 && !$bypassCookies) {
|
if($session == 2 && !$bypassCookies) {
|
||||||
|
|
||||||
|
@ -135,7 +136,7 @@ class Users {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the user has the required privs to log in
|
// Check if the user has the required privs to log in
|
||||||
if(self::checkIfUserHasRanks([0, 1], $user, true))
|
if(Permissions::check('SITE', 'DEACTIVATED', $user['id'], 1))
|
||||||
return [0, 'NOT_ALLOWED'];
|
return [0, 'NOT_ALLOWED'];
|
||||||
|
|
||||||
// Create a new session
|
// Create a new session
|
||||||
|
@ -259,7 +260,7 @@ class Users {
|
||||||
'lastdate' => 0,
|
'lastdate' => 0,
|
||||||
'lastunamechange' => time(),
|
'lastunamechange' => time(),
|
||||||
'country' => Main::getCountryCode(),
|
'country' => Main::getCountryCode(),
|
||||||
'profile_data' => '[]'
|
'userData' => '[]'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Get userid of the new user
|
// Get userid of the new user
|
||||||
|
@ -307,9 +308,9 @@ class Users {
|
||||||
if(count($user) < 2)
|
if(count($user) < 2)
|
||||||
return [0, 'USER_NOT_EXIST'];
|
return [0, 'USER_NOT_EXIST'];
|
||||||
|
|
||||||
// Check if the user is deactivated
|
// Check if the user has the required privs to log in
|
||||||
if(self::checkIfUserHasRanks([0, 1], $user, true))
|
if(Permissions::check('SITE', 'DEACTIVATED', $user['id'], 1))
|
||||||
return [0, 'DEACTIVATED'];
|
return [0, 'NOT_ALLOWED'];
|
||||||
|
|
||||||
// Generate the verification key
|
// Generate the verification key
|
||||||
$verk = Main::newActionCode('LOST_PASS', $user['id'], [
|
$verk = Main::newActionCode('LOST_PASS', $user['id'], [
|
||||||
|
@ -349,9 +350,9 @@ class Users {
|
||||||
// Get user data
|
// Get user data
|
||||||
$user = Users::getUser(Session::$userId);
|
$user = Users::getUser(Session::$userId);
|
||||||
|
|
||||||
// Check if the user is deactivated
|
// Check if the user has the required privs to log in
|
||||||
if(self::checkIfUserHasRanks([0, 1], $user, true))
|
if(Permissions::check('SITE', 'DEACTIVATED', $user['id'], 1))
|
||||||
return [0, 'DEACTIVATED'];
|
return [0, 'NOT_ALLOWED'];
|
||||||
|
|
||||||
// Check if the account is disabled
|
// Check if the account is disabled
|
||||||
if('nologin' == $user['password_algo'])
|
if('nologin' == $user['password_algo'])
|
||||||
|
@ -459,7 +460,7 @@ class Users {
|
||||||
return [0, 'USER_NOT_EXIST'];
|
return [0, 'USER_NOT_EXIST'];
|
||||||
|
|
||||||
// Check if a user is activated
|
// Check if a user is activated
|
||||||
if(!self::checkIfUserHasRanks([0, 1], $user, true))
|
if(!Permissions::check('SITE', 'DEACTIVATED', $user['id'], 1))
|
||||||
return [0, 'USER_ALREADY_ACTIVE'];
|
return [0, 'USER_ALREADY_ACTIVE'];
|
||||||
|
|
||||||
// Send activation e-mail
|
// Send activation e-mail
|
||||||
|
@ -477,7 +478,7 @@ class Users {
|
||||||
$user = Database::fetch('users', false, ['id' => [$uid, '=']]);
|
$user = Database::fetch('users', false, ['id' => [$uid, '=']]);
|
||||||
|
|
||||||
// User is already activated or doesn't even exist
|
// User is already activated or doesn't even exist
|
||||||
if(count($user) < 2 || !self::checkIfUserHasRanks([0, 1], $user, true))
|
if(count($user) < 2 || !Permissions::check('SITE', 'DEACTIVATED', $user['id'], 1))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Generate activation key
|
// Generate activation key
|
||||||
|
@ -521,7 +522,7 @@ class Users {
|
||||||
return [0, 'USER_NOT_EXIST'];
|
return [0, 'USER_NOT_EXIST'];
|
||||||
|
|
||||||
// Check if user is already activated
|
// Check if user is already activated
|
||||||
if(!self::checkIfUserHasRanks([0, 1], $user, true))
|
if(!Permissions::check('SITE', 'DEACTIVATED', $user['id'], 1))
|
||||||
return [0, 'USER_ALREADY_ACTIVE'];
|
return [0, 'USER_ALREADY_ACTIVE'];
|
||||||
|
|
||||||
// Set default values for activation
|
// Set default values for activation
|
||||||
|
@ -572,7 +573,7 @@ class Users {
|
||||||
return [0, 'USER_NOT_EXIST'];
|
return [0, 'USER_NOT_EXIST'];
|
||||||
|
|
||||||
// Check if user is already deactivated
|
// Check if user is already deactivated
|
||||||
if(self::checkIfUserHasRanks([0, 1], $user, true))
|
if(Permissions::check('SITE', 'DEACTIVATED', $user['id'], 1))
|
||||||
return [0, 'USER_ALREADY_DEACTIVE'];
|
return [0, 'USER_ALREADY_DEACTIVE'];
|
||||||
|
|
||||||
// Deactivate the account
|
// Deactivate the account
|
||||||
|
@ -693,8 +694,22 @@ class Users {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Getting the profile data array of a user
|
||||||
|
public static function getUserProfileData($id, $inputIsUser = false) {
|
||||||
|
|
||||||
|
// Get user data
|
||||||
|
$user = ($inputIsUser ? $id : self::getUser($id));
|
||||||
|
|
||||||
|
// Decode the userData json
|
||||||
|
$data = json_decode($user['userData'], true);
|
||||||
|
|
||||||
|
// Return the profile data
|
||||||
|
return $data;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Get user's profile fields
|
// Get user's profile fields
|
||||||
public static function getUserProfileData($id) {
|
public static function getUserProfileFields($id, $inputIsData = false) {
|
||||||
|
|
||||||
// Get profile fields
|
// Get profile fields
|
||||||
$profileFields = Database::fetch('profilefields');
|
$profileFields = Database::fetch('profilefields');
|
||||||
|
@ -703,15 +718,15 @@ class Users {
|
||||||
if(!count($profileFields))
|
if(!count($profileFields))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
// Get the profile data JSON from the specified user's profile
|
// Assign the profileData variable
|
||||||
$profileData = Database::fetch('users', false, ['id' => [$id, '=']]);
|
$profileData = ($inputIsData ? $id : self::getUserProfileData($id));
|
||||||
|
|
||||||
// Once again if nothing was returned just return null
|
// Once again if nothing was returned just return null
|
||||||
if(count($profileData) < 2 || $profileData['profile_data'] == null || !count(json_decode($profileData['profile_data'], true)))
|
if(count($profileData) < 1 || $profileData == null || empty($profileData['profileFields']))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
// Decode the profile_data json
|
// Redeclare profileData
|
||||||
$profileData = json_decode($profileData['profile_data'], true);
|
$profileData = $profileData['profileFields'];
|
||||||
|
|
||||||
// Create output array
|
// Create output array
|
||||||
$profile = [];
|
$profile = [];
|
||||||
|
@ -763,6 +778,39 @@ class Users {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Getting the profile page of a user
|
||||||
|
public static function getProfilePage($id, $inputIsData = false) {
|
||||||
|
|
||||||
|
// Check if the input is the data
|
||||||
|
if($inputIsData) {
|
||||||
|
|
||||||
|
// Reassign data
|
||||||
|
$data = $id;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Get user data
|
||||||
|
$user = self::getUser($id);
|
||||||
|
|
||||||
|
// Decode the userData json
|
||||||
|
$data = json_decode($user['userData'], true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the profilePage key exists
|
||||||
|
if(!array_key_exists('profilePage', $data))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// TODO: implement BBcodes
|
||||||
|
|
||||||
|
// Parse the markdown
|
||||||
|
$profilePage = Main::mdParse(base64_decode($data['profilePage'][0]));
|
||||||
|
|
||||||
|
// Return the parsed profile page
|
||||||
|
return $profilePage;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Check if a user is online
|
// Check if a user is online
|
||||||
public static function checkUserOnline($id) {
|
public static function checkUserOnline($id) {
|
||||||
|
|
||||||
|
@ -860,7 +908,7 @@ class Users {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get users in rank
|
// Get users in rank
|
||||||
public static function getUsersInRank($rankId, $users = null) {
|
public static function getUsersInRank($rankId, $users = null, $excludeAbyss = true) {
|
||||||
|
|
||||||
// Get all users (or use the supplied user list to keep server load down)
|
// Get all users (or use the supplied user list to keep server load down)
|
||||||
if(!$users)
|
if(!$users)
|
||||||
|
@ -873,7 +921,7 @@ class Users {
|
||||||
foreach($users as $user) {
|
foreach($users as $user) {
|
||||||
|
|
||||||
// If so store the user's row in the array
|
// If so store the user's row in the array
|
||||||
if(self::checkIfUserHasRanks([$rankId], $user, true) && $user['password_algo'] != 'nologin')
|
if(self::checkIfUserHasRanks([$rankId], $user, true) && ($excludeAbyss ? $user['password_algo'] != 'nologin' : true))
|
||||||
$rank[] = $user;
|
$rank[] = $user;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -900,7 +948,7 @@ class Users {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Skip if inactive and not include deactivated users
|
// Skip if inactive and not include deactivated users
|
||||||
if(!$includeInactive && self::checkIfUserHasRanks([0, 1], $user, true))
|
if(!$includeInactive && Permissions::check('SITE', 'DEACTIVATED', $user['id'], 1))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$users[$user['id']] = $user;
|
$users[$user['id']] = $user;
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
namespace Sakura;
|
namespace Sakura;
|
||||||
|
|
||||||
// Define Sakura version
|
// Define Sakura version
|
||||||
define('SAKURA_VERSION', '20150529');
|
define('SAKURA_VERSION', '20150604');
|
||||||
define('SAKURA_VLABEL', 'Eminence');
|
define('SAKURA_VLABEL', 'Eminence');
|
||||||
define('SAKURA_VTYPE', 'Development');
|
define('SAKURA_VTYPE', 'Development');
|
||||||
define('SAKURA_COLOUR', '#6C3082');
|
define('SAKURA_COLOUR', '#6C3082');
|
||||||
|
@ -51,6 +51,7 @@ ob_start(Configuration::getConfig('use_gzip') ? 'ob_gzhandler' : null);
|
||||||
$renderData = [
|
$renderData = [
|
||||||
|
|
||||||
'sakura' => [
|
'sakura' => [
|
||||||
|
|
||||||
'version' => SAKURA_VERSION,
|
'version' => SAKURA_VERSION,
|
||||||
'vlabel' => SAKURA_VLABEL,
|
'vlabel' => SAKURA_VLABEL,
|
||||||
'vtype' => SAKURA_VTYPE,
|
'vtype' => SAKURA_VTYPE,
|
||||||
|
@ -76,15 +77,26 @@ $renderData = [
|
||||||
'minpwdentropy' => Configuration::getConfig('min_entropy'),
|
'minpwdentropy' => Configuration::getConfig('min_entropy'),
|
||||||
'minusernamelength' => Configuration::getConfig('username_min_length'),
|
'minusernamelength' => Configuration::getConfig('username_min_length'),
|
||||||
'maxusernamelength' => Configuration::getConfig('username_max_length')
|
'maxusernamelength' => Configuration::getConfig('username_max_length')
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
'perms' => [
|
||||||
|
|
||||||
|
'canUseChat' => Permissions::check('SITE', 'USE_CHAT', Session::$userId, 1),
|
||||||
|
'canUseForums' => Permissions::check('FORUM', 'USE_FORUM', Session::$userId, 1)
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
'php' => [
|
'php' => [
|
||||||
|
|
||||||
'sessionid' => \session_id(),
|
'sessionid' => \session_id(),
|
||||||
'time' => \time(),
|
'time' => \time(),
|
||||||
'self' => $_SERVER['PHP_SELF']
|
'self' => $_SERVER['PHP_SELF']
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
'user' => [
|
'user' => [
|
||||||
|
|
||||||
'checklogin' => Users::checkLogin(),
|
'checklogin' => Users::checkLogin(),
|
||||||
'session' => Session::$sessionId,
|
'session' => Session::$sessionId,
|
||||||
'data' => ($_init_udata = Users::getUser(Session::$userId)),
|
'data' => ($_init_udata = Users::getUser(Session::$userId)),
|
||||||
|
|
|
@ -178,7 +178,9 @@
|
||||||
<!-- Navigation menu, displayed on left side of the bar. -->
|
<!-- Navigation menu, displayed on left side of the bar. -->
|
||||||
<a class="menu-item" href="//{{ sakura.urls.main }}/" title="Return to the front page of Flashii">Home</a>
|
<a class="menu-item" href="//{{ sakura.urls.main }}/" title="Return to the front page of Flashii">Home</a>
|
||||||
<a class="menu-item" href="//{{ sakura.urls.main }}/news" title="Here you can read updates on Flashii">News</a>
|
<a class="menu-item" href="//{{ sakura.urls.main }}/news" title="Here you can read updates on Flashii">News</a>
|
||||||
|
{% if perms.canUseChat %}
|
||||||
<a class="menu-item" href="//{{ sakura.urls.chat }}/" title="Chat with other Flashii members">Chat</a>
|
<a class="menu-item" href="//{{ sakura.urls.chat }}/" title="Chat with other Flashii members">Chat</a>
|
||||||
|
{% endif %}
|
||||||
<a class="menu-item" href="//{{ sakura.urls.main }}/forum" title="Discuss things with other members but static">Forums</a>
|
<a class="menu-item" href="//{{ sakura.urls.main }}/forum" title="Discuss things with other members but static">Forums</a>
|
||||||
<a class="menu-item" href="//{{ sakura.urls.main }}/search" title="Search on Flashii">Search</a>
|
<a class="menu-item" href="//{{ sakura.urls.main }}/search" title="Search on Flashii">Search</a>
|
||||||
{% if user.checklogin %}
|
{% if user.checklogin %}
|
||||||
|
@ -240,3 +242,4 @@
|
||||||
<p>A lot of things on this site require JavaScript to be enabled (e.g. the chat), we try to keep both sides happy but it is highly recommended that you enable it (you'll also have to deal with this message being here if you don't enable it).</p>
|
<p>A lot of things on this site require JavaScript to be enabled (e.g. the chat), we try to keep both sides happy but it is highly recommended that you enable it (you'll also have to deal with this message being here if you don't enable it).</p>
|
||||||
</div>
|
</div>
|
||||||
</noscript>
|
</noscript>
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
{% else %}
|
{% else %}
|
||||||
<div id="userBackground"></div>
|
<div id="userBackground"></div>
|
||||||
<div class="content profile">
|
<div class="content profile">
|
||||||
<div class="{% if profile.profpage|length > 1 %}content-right {% endif %}content-column">
|
<div class="{% if profile.profilePage|length > 1 %}content-right {% endif %}content-column">
|
||||||
<div style="text-align: center;">
|
<div style="text-align: center;">
|
||||||
<img src="/a/{{ profile.user.id }}" alt="{{ profile.user.username }}'s Avatar" class="default-avatar-setting" style="box-shadow: 0 3px 7px #{% if profile.online %}484{% else %}844{% endif %};" />
|
<img src="/a/{{ profile.user.id }}" alt="{{ profile.user.username }}'s Avatar" class="default-avatar-setting" style="box-shadow: 0 3px 7px #{% if profile.online %}484{% else %}844{% endif %};" />
|
||||||
<br /><span style="font-size: .8em;">{{ profile.ranktitle }}</span>
|
<br /><span style="font-size: .8em;">{{ profile.ranktitle }}</span>
|
||||||
|
@ -38,11 +38,11 @@
|
||||||
<b>Last Seen on</b> {{ profile.user.lastdate|date("l Y-m-d H:i T") }}
|
<b>Last Seen on</b> {{ profile.user.lastdate|date("l Y-m-d H:i T") }}
|
||||||
{% endif %}<br />
|
{% endif %}<br />
|
||||||
<b>User has {% if not profile.user.posts %}no{% else %}{{ profile.user.posts }}{% endif %} forum post{% if profile.user.posts != 1 %}s{% endif %}.</b>
|
<b>User has {% if not profile.user.posts %}no{% else %}{{ profile.user.posts }}{% endif %} forum post{% if profile.user.posts != 1 %}s{% endif %}.</b>
|
||||||
{% if profile.data is not null %}
|
{% if profile.fields is not null %}
|
||||||
<hr class="default" />
|
<hr class="default" />
|
||||||
{% if user.checklogin %}
|
{% if user.checklogin %}
|
||||||
<table style="width: 100%;">
|
<table style="width: 100%;">
|
||||||
{% for name,field in profile.data %}
|
{% for name,field in profile.fields %}
|
||||||
<tr>
|
<tr>
|
||||||
<td style="text-align: left; font-weight: bold;">
|
<td style="text-align: left; font-weight: bold;">
|
||||||
{{ field.name }}
|
{{ field.name }}
|
||||||
|
@ -82,12 +82,12 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="content-left content-column markdown{% if profile.profpage|length < 1 %} hidden{% endif %}">
|
<div class="content-left content-column markdown{% if profile.profilePage|length < 1 %} hidden{% endif %}">
|
||||||
{{ profile.profpage|raw }}
|
{{ profile.profilePage|raw }}
|
||||||
</div>
|
</div>
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
</div>
|
</div>
|
||||||
{% if profile.user.background_url %}
|
{% if profile.data.profileBackground %}
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
initialiseParallax('userBackground');
|
initialiseParallax('userBackground');
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,77 +0,0 @@
|
||||||
/*
|
|
||||||
* Authentication page Styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
.loginPage {
|
|
||||||
margin: 0 auto;
|
|
||||||
max-width: 825px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loginPage > .registerCont > *,
|
|
||||||
.loginPage > .loginCont > * {
|
|
||||||
text-align: center;
|
|
||||||
border: 1px solid #9475B2;
|
|
||||||
margin: 10px auto;
|
|
||||||
padding: 2px 3px;
|
|
||||||
width: 400px;
|
|
||||||
border: 1px solid #9475B2;
|
|
||||||
box-shadow: 0 0 3px #9475B2;
|
|
||||||
border-radius: 3px;
|
|
||||||
background: #D3BFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 430px) {
|
|
||||||
|
|
||||||
.loginPage > .registerCont > *,
|
|
||||||
.loginPage > .loginCont > * {
|
|
||||||
width: 300px;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.loginPage > .loginCont {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loginPage > .registerCont {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 820px) {
|
|
||||||
|
|
||||||
.loginPage > .loginCont {
|
|
||||||
float: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loginPage > .registerCont {
|
|
||||||
float: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.loginPage .head {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loginPage > div > form > div > input {
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loginPage input[type="text"],
|
|
||||||
.loginPage input[type="password"] {
|
|
||||||
width: calc(100% - 16px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.loginPage form > div > label {
|
|
||||||
font-size: 20px;
|
|
||||||
font-weight: 100;
|
|
||||||
padding: 0 5px;
|
|
||||||
line-height: 32px;
|
|
||||||
color: #222;
|
|
||||||
text-shadow: #888 0 0 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loginPage .subLinks {
|
|
||||||
font-size: 10px;
|
|
||||||
}
|
|
|
@ -1,416 +0,0 @@
|
||||||
/*
|
|
||||||
* Standard Elements
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
* {
|
|
||||||
/* Reset margin and padding */
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
font: 12px/20px Verdana, sans-serif;
|
|
||||||
background: linear-gradient(180deg, #C2AFFE, #FBEEFF) no-repeat scroll left top #FBEEFF;
|
|
||||||
background-size: cover;
|
|
||||||
color: #000;
|
|
||||||
height: 100%;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#container {
|
|
||||||
min-height: 100%;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#contentwrapper {
|
|
||||||
padding-bottom: 220px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 642px) {
|
|
||||||
|
|
||||||
#contentwrapper {
|
|
||||||
padding-bottom: 335px;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 426px) {
|
|
||||||
|
|
||||||
#contentwrapper {
|
|
||||||
padding-bottom: 450px;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@media (max-width: 400px) {
|
|
||||||
|
|
||||||
#contentwrapper {
|
|
||||||
padding-bottom: 450px;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 300px) {
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#contentwrapper {
|
|
||||||
padding-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.clear {
|
|
||||||
clear: both !important;
|
|
||||||
float: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none !important;
|
|
||||||
visibility: hidden !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.centreAlign {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.leftAlign {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.rightAlign {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6 {
|
|
||||||
font-family: "SegoeUI-Light", "Segoe UI", sans-serif;
|
|
||||||
font-weight: 100;
|
|
||||||
margin: 5px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1.stylised {
|
|
||||||
text-shadow: 0 0 5px #8364A1;
|
|
||||||
color: #614390;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.default {
|
|
||||||
border: 0;
|
|
||||||
height: 1px;
|
|
||||||
color: #9475B2;
|
|
||||||
background: #9475B2;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
max-width: 100%;
|
|
||||||
max-height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.default-avatar-setting {
|
|
||||||
max-width: 200px;
|
|
||||||
max-height: 200px;
|
|
||||||
border: 3px solid #EEE;
|
|
||||||
background: #EEE;
|
|
||||||
box-shadow: 0 3px 7px #888;
|
|
||||||
border-radius: 3px;
|
|
||||||
margin: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.homepage-menu-avatar {
|
|
||||||
float: right;
|
|
||||||
max-width: 100px;
|
|
||||||
max-width: 100px;
|
|
||||||
margin-top: -25px;
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 400px) {
|
|
||||||
|
|
||||||
img.homepage-menu-avatar {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.standalone img:not(:hover) {
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.clean,
|
|
||||||
a.underline,
|
|
||||||
a.no-underline {
|
|
||||||
color: inherit !important;
|
|
||||||
text-decoration: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.underline:hover {
|
|
||||||
text-decoration: underline !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.default {
|
|
||||||
color: #22E;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.default:hover {
|
|
||||||
color: #22E;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.default:active {
|
|
||||||
color: #E22;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gotop {
|
|
||||||
display: inline-block;
|
|
||||||
background: #111;
|
|
||||||
color: #FFF;
|
|
||||||
width: 60px;
|
|
||||||
height: 60px;
|
|
||||||
border-radius: 5px;
|
|
||||||
text-decoration: none;
|
|
||||||
opacity: .3;
|
|
||||||
transition: opacity .5s, box-shadow .5s;
|
|
||||||
margin: 10px 5px;
|
|
||||||
float: right;
|
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
right: 5px;
|
|
||||||
z-index: 2;
|
|
||||||
line-height: 60px;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 5em;
|
|
||||||
text-shadow: 0 0 5px #FFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gotop:hover {
|
|
||||||
opacity: .8;
|
|
||||||
box-shadow: 0 0 7px #FFF inset;
|
|
||||||
text-shadow: 0 0 7px #FFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gotop:active {
|
|
||||||
box-shadow: 0 0 15px #FFF inset;
|
|
||||||
text-shadow: 0 0 10px #FFF;
|
|
||||||
opacity: .9;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gotop.enter {
|
|
||||||
animation: slideInFromRight 1 .6s;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gotop.exit {
|
|
||||||
animation: slideOutToBottom 1 .6s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content {
|
|
||||||
margin: 10px auto;
|
|
||||||
padding: 2px 3px;
|
|
||||||
width: 1024px;
|
|
||||||
border: 1px solid #9475B2;
|
|
||||||
box-shadow: 0 0 3px #9475B2;
|
|
||||||
border-radius: 3px;
|
|
||||||
background: #D3BFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content-column {
|
|
||||||
position: relative;
|
|
||||||
min-height: 600px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content-left {
|
|
||||||
float: left;
|
|
||||||
width: 688px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content-right {
|
|
||||||
float: right;
|
|
||||||
width: 334px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content-left .head,
|
|
||||||
.news .head,
|
|
||||||
.donate .head,
|
|
||||||
.loginPage > .loginCont .head,
|
|
||||||
.messages .head {
|
|
||||||
margin: -1px -2px;
|
|
||||||
padding: 4px 5px 5px;
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: 20px;
|
|
||||||
color: #306;
|
|
||||||
background: linear-gradient(90deg, rgba(148,117,178,.7), rgba(148,117,178,0)) #C2AFFE;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content-right .head,
|
|
||||||
.loginPage > .registerCont .head {
|
|
||||||
margin: -1px -2px -1px;
|
|
||||||
padding: 4px 5px 5px;
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: 20px;
|
|
||||||
color: #306;
|
|
||||||
background: linear-gradient(270deg, rgba(148,117,178,.7), rgba(148,117,178,0)) #C2AFFE;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.standalone {
|
|
||||||
background: #C2AEEE;
|
|
||||||
padding: 10px;
|
|
||||||
width: auto;
|
|
||||||
max-width: 1024px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.private-message {
|
|
||||||
border-top: 1px solid #C2AEEE;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ajax-busy {
|
|
||||||
background: rgba(0, 0, 0, .4);
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0;
|
|
||||||
right: 0;
|
|
||||||
z-index: 5;
|
|
||||||
text-align: center;
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ajax-busy .ajax-inner {
|
|
||||||
line-height: 2em;
|
|
||||||
color: #FFF;
|
|
||||||
background: #222;
|
|
||||||
background: linear-gradient(0deg, rgba(0, 0, 0, .4) 20%, transparent) rgba(0, 0, 0, .8);
|
|
||||||
display: inline-block;
|
|
||||||
margin: 10% auto 0;
|
|
||||||
padding: 10px 20px 15px;
|
|
||||||
border-radius: 10px;
|
|
||||||
box-shadow: 0 5px 1em #111;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ajax-busy .ajax-inner h2 {
|
|
||||||
padding-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.homepage .content-right ul {
|
|
||||||
margin: 10px 0;
|
|
||||||
margin-left: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropDown {
|
|
||||||
display: inline-block;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropDown .dropDownInner {
|
|
||||||
display: inline-block;
|
|
||||||
background: rgba(12, 12, 12, .7);
|
|
||||||
min-width: 200px;
|
|
||||||
border: 2px solid #9475B2;
|
|
||||||
float: left;
|
|
||||||
font-family: "Segoe UI", sans-serif;
|
|
||||||
text-align: left;
|
|
||||||
margin: 0 2px;
|
|
||||||
transition: background .5s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropDown .dropDownInner:hover {
|
|
||||||
background: rgba(21, 21, 21, .8);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropDown .dropDownInner a {
|
|
||||||
padding: 0 1px 0 4px;
|
|
||||||
display: none;
|
|
||||||
color: #FFF;
|
|
||||||
text-decoration: none;
|
|
||||||
clear: both;
|
|
||||||
transition: background .2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropDown .dropDownInner a:hover {
|
|
||||||
background: rgba(21, 21, 21, .5);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropDown .dropDownInner a:active {
|
|
||||||
background: rgba(21, 21, 21, .7);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropDown .dropDownInner a.dropDownSelected {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropDown .dropDownInner:hover a {
|
|
||||||
display: block;
|
|
||||||
float: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropDown .dropDownInner a.dropDownDesc {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropDown .dropDownInner:hover a.dropDownDesc {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#headerLoginForm {
|
|
||||||
background: #9475B2;
|
|
||||||
border-bottom: 2px solid #9475B2;
|
|
||||||
box-shadow: 0 0 5px #8364A1;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
#headerLoginForm > div {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 640px) {
|
|
||||||
|
|
||||||
#headerLoginForm > div {
|
|
||||||
display: block;
|
|
||||||
text-align: right;
|
|
||||||
padding-right: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#headerLoginForm label {
|
|
||||||
font-family: "Segoe UI", sans-serif;
|
|
||||||
font-weight: 100;
|
|
||||||
font-size: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexSidePanelLinks {
|
|
||||||
font-size: 4em;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 1.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexSidePanelLinks > a {
|
|
||||||
color: #8364A1;
|
|
||||||
text-decoration: none;
|
|
||||||
text-shadow: 0 0 2px #9475B2;
|
|
||||||
transition: all .2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexSidePanelLinks > a:hover {
|
|
||||||
text-shadow: 0 0 6px #9475B2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexSidePanelLinks > a:active {
|
|
||||||
color: #725390;
|
|
||||||
text-shadow: 0 0 8px #8364A1;
|
|
||||||
}
|
|
|
@ -1,65 +0,0 @@
|
||||||
/*
|
|
||||||
* Donation page Styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
.donate .sectionHeader {
|
|
||||||
margin: -1px -2px;
|
|
||||||
background: linear-gradient(270deg, rgba(148, 117, 178, .7), rgba(148, 117, 178, 0), rgba(148, 117, 178, .7)) #C2AFFE;
|
|
||||||
padding: 2px;
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: 15px;
|
|
||||||
color: #306;
|
|
||||||
}
|
|
||||||
|
|
||||||
.donate .featureParent {
|
|
||||||
width: 100%;
|
|
||||||
padding: 10px 0;
|
|
||||||
overflow: hidden;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.donate .featureBox {
|
|
||||||
background: linear-gradient(180deg, #C2AFFE, #B19EED) no-repeat scroll left top / cover #C2AFFE;
|
|
||||||
margin: 7px;
|
|
||||||
border-radius: 5px;
|
|
||||||
text-align: center;
|
|
||||||
box-shadow: 0 0 .5em #000;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
transition: box-shadow .2s;
|
|
||||||
width: 320px;
|
|
||||||
padding: 5px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.donate .featureBox:hover {
|
|
||||||
box-shadow: 0 0 1em #000;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.donate .featureBox:active {
|
|
||||||
box-shadow: 0 0 1.5em #609;
|
|
||||||
}
|
|
||||||
|
|
||||||
.donate .featureBoxHeader {
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.donate .featureBoxDesc {
|
|
||||||
padding: 1px 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.donate .featureBoxDesc.donateClosed {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.donate .featureBoxDesc.donateOpened {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.donate .paypal-donate-form {
|
|
||||||
margin: 10px auto;
|
|
||||||
display: block;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
|
@ -1,63 +1,83 @@
|
||||||
html {
|
html,
|
||||||
background: url('/images/satori-error.png') top right no-repeat #FFF;
|
|
||||||
font-family: 'verdana', sans-serif;
|
|
||||||
font-size: 0.8em;
|
|
||||||
}
|
|
||||||
body {
|
body {
|
||||||
margin: 0px 2em;
|
|
||||||
}
|
|
||||||
html, body {
|
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
width: 90;
|
width: 90;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
background: url('/images/satori-error.png') top right no-repeat #FFF;
|
||||||
|
font-family: 'verdana', sans-serif;
|
||||||
|
font-size: .8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0 2em;
|
||||||
|
}
|
||||||
|
|
||||||
#wrap {
|
#wrap {
|
||||||
max-width: 34em;
|
max-width: 34em;
|
||||||
}
|
}
|
||||||
h1, h2, h3, p {
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
p {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
margin: 1.33em 0;
|
margin: 1.33em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 img {
|
h1 img {
|
||||||
margin: 0px 0.5em -0.75em 0px;
|
margin: 0 .5em -.75em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
padding: 0px;
|
padding: 0;
|
||||||
margin: 2em 0px;
|
margin: 2em 0;
|
||||||
line-height: 1.33em;
|
line-height: 1.33em;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
margin: 1.9em 0px;
|
margin: 1.9em 0;
|
||||||
background: #BBB;
|
background: #BBB;
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
padding: 0.75em 0px 0px 0px;
|
padding: .75em 0 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
margin: 0px 0px 0.8em 3.46em;
|
margin: 0px 0px 0.8em 3.46em;
|
||||||
line-height: 1.32em;
|
line-height: 1.32em;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
img+a:before {
|
img+a:before {
|
||||||
content: ' ';
|
content: " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
margin: 2.5em 0px;
|
margin: 2.5em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
li:nth-child(3) img {
|
li:nth-child(3) img {
|
||||||
margin: -0.2em 0px
|
margin: -0.2em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
li:nth-child(4) img {
|
li:nth-child(4) img {
|
||||||
margin: -0.5em 0px
|
margin: -0.5em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
table {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
@ -67,12 +87,16 @@ table {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
table, tr, td {
|
|
||||||
background: rgba(0,0,0,0.2);
|
table,
|
||||||
|
tr,
|
||||||
|
td {
|
||||||
|
background: rgba(0, 0, 0, .2);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
table img {
|
table img {
|
||||||
border-radius: 32px;
|
border-radius: 32px;
|
||||||
box-shadow: 0 4px 32px #888;
|
box-shadow: 0 4px 32px #888;
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
/*
|
|
||||||
* Site footer styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
box-shadow: 0 0 1em #9475B2;
|
|
||||||
font-size: small;
|
|
||||||
width: 100%;
|
|
||||||
padding-top: 10px;
|
|
||||||
padding-bottom: 30px;
|
|
||||||
background: linear-gradient(180deg, #9475B2 0%, #FBEEFF 20%, #C2AFFE 100%) #C2AFFE;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer .ftsections a {
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer .ftsections a:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer .ftsections {
|
|
||||||
margin: auto;
|
|
||||||
text-align: center;
|
|
||||||
width: 95%;
|
|
||||||
min-height: 150px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer .ftsections .ftsection {
|
|
||||||
vertical-align: top;
|
|
||||||
text-align: left;
|
|
||||||
display: inline-block;
|
|
||||||
width: 200px;
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer .ftsections .ftsection li {
|
|
||||||
margin: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer .ftsections .ftsection li.fthead {
|
|
||||||
margin-bottom: 5px;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer .sections .copycentre {
|
|
||||||
text-align: center;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
/*
|
|
||||||
* Forum Styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
.forum .forumList {
|
|
||||||
width: 100%;
|
|
||||||
border-spacing: 0;
|
|
||||||
margin-top: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumCategory {
|
|
||||||
background: #C2AFFE;
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: 17px;
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumCategory .forumCategoryTitleColumn {
|
|
||||||
padding: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum {
|
|
||||||
height: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum .forumIconColumn {
|
|
||||||
text-align: center;
|
|
||||||
width: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum .forumIconColumn .forumIcon.read {
|
|
||||||
color: #444;
|
|
||||||
text-shadow: 0 0 5px #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum .forumIconColumn .forumIcon.unread {
|
|
||||||
color: #6C5D7B;
|
|
||||||
text-shadow: 0 0 5px #9475B2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum .forumTitleColumn .name {
|
|
||||||
font-size: 1.2em;
|
|
||||||
line-height: 1.7em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum .forumTitleColumn .desc {
|
|
||||||
font-size: .8em;
|
|
||||||
line-height: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum .forumCountColumn {
|
|
||||||
width: 70px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum .forumCountColumn .topics {
|
|
||||||
font-size: 1.5em;
|
|
||||||
color: #111;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum .forumCountColumn .posts {
|
|
||||||
font-size: .8em;
|
|
||||||
line-height: 1.2em;
|
|
||||||
color: #555;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum .forumLastColumn {
|
|
||||||
width: 250px;
|
|
||||||
font-size: .9em;
|
|
||||||
line-height: 1.4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.forum .forumList .forumForum .forumLastColumn div,
|
|
||||||
.forum .forumList .forumForum .forumTitleColumn div {
|
|
||||||
padding-left: 5px;
|
|
||||||
}
|
|
|
@ -1,185 +0,0 @@
|
||||||
/*
|
|
||||||
* Site header styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
.header {
|
|
||||||
text-align: center;
|
|
||||||
background: linear-gradient(180deg, #C2AFFE, #CCBAFE);
|
|
||||||
box-shadow: 0 0 5px #8364A1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .logo {
|
|
||||||
background: none;
|
|
||||||
height: auto;
|
|
||||||
width: auto;
|
|
||||||
display: inline-block;
|
|
||||||
text-decoration: none;
|
|
||||||
font: 100 70px/80px "SegoeUI-Light", "Segoe UI", sans-serif;
|
|
||||||
color: #B06AC4;
|
|
||||||
transition: color .2s, text-shadow .2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .logo:hover {
|
|
||||||
color: #C17BD5;
|
|
||||||
text-shadow: 0 0 .1em #C17BD5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .logo:active {
|
|
||||||
color: #A059B3;
|
|
||||||
text-shadow: 0 0 .1em #A059B3;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.header .logo {
|
|
||||||
font: 100 50px/60px "SegoeUI-Light", "Segoe UI", sans-serif;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu {
|
|
||||||
border-bottom: 2px solid #9475B2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-nav {
|
|
||||||
text-align: left;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-ucp {
|
|
||||||
text-align: right;
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-mob {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-item {
|
|
||||||
margin: 0 8px -2px;
|
|
||||||
display: inline-block;
|
|
||||||
min-width: 75px;
|
|
||||||
padding: 5px;
|
|
||||||
border-bottom: 2px solid #8364A1;
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
text-align: center;
|
|
||||||
transition: border-color .5s, background .3s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-item.avatar {
|
|
||||||
width: auto;
|
|
||||||
padding-left: 36px;
|
|
||||||
background: url('/pixel.png') no-repeat scroll left center / contain transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-item:hover {
|
|
||||||
border-color: #503180 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-item:active {
|
|
||||||
border-color: #503180 !important;
|
|
||||||
background-color: #503180 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-donate:hover {
|
|
||||||
border-color: #EE9400 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-donate:active {
|
|
||||||
border-color: #EE9400 !important;
|
|
||||||
background-color: #EE9400 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 1283px) and (min-width: 930px) {
|
|
||||||
|
|
||||||
.header .menu {
|
|
||||||
border: 0;
|
|
||||||
padding-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-nav {
|
|
||||||
margin-left: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-nav,
|
|
||||||
.header .menu .menu-ucp {
|
|
||||||
display: block;
|
|
||||||
float: none;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-item {
|
|
||||||
min-width: 120px;
|
|
||||||
border: 0;
|
|
||||||
margin: 0 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-nav .menu-item {
|
|
||||||
min-width: 120px;
|
|
||||||
border-bottom: 1px solid #8364A1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-ucp .menu-item {
|
|
||||||
min-width: 120px;
|
|
||||||
border-top: 1px solid #8364A1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 930px) {
|
|
||||||
|
|
||||||
.header .menu .menu-nav, .header .menu .menu-ucp {
|
|
||||||
float: none;
|
|
||||||
text-align: center;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-hid {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-mob {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-item.avatar {
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-mob .menu-item {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-nav .menu-item, .header .menu .menu-ucp .menu-item {
|
|
||||||
display: block;
|
|
||||||
border-top: 0;
|
|
||||||
border-bottom: 1px solid #8364A1;
|
|
||||||
margin: 0 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-nav:before {
|
|
||||||
content: "Navigation";
|
|
||||||
font-size: 20px;
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .menu .menu-ucp:before {
|
|
||||||
content: "User Settings";
|
|
||||||
font-size: 20px;
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.headerNotify {
|
|
||||||
margin: 10px auto;
|
|
||||||
padding: 10px;
|
|
||||||
width: auto;
|
|
||||||
max-width: 1024px;
|
|
||||||
border: 1px solid #9475B2;
|
|
||||||
box-shadow: 0 0 3px #9475B2;
|
|
||||||
border-radius: 3px;
|
|
||||||
background: #D3BFFF;
|
|
||||||
display: block;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
|
@ -1,74 +0,0 @@
|
||||||
/*
|
|
||||||
* Input box Styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
input[type="submit"].inputStyling,
|
|
||||||
input[type="button"].inputStyling,
|
|
||||||
input[type="reset"].inputStyling {
|
|
||||||
padding: 3px 10px;
|
|
||||||
cursor: pointer;
|
|
||||||
border: 0;
|
|
||||||
border-radius: 3px;
|
|
||||||
background: linear-gradient(180deg, #9475B2 0%, #9475B2 50%, #86A 50%) #9475B2;
|
|
||||||
margin: 4px 1px;
|
|
||||||
color: #FFF;
|
|
||||||
box-shadow: inset #222 0 0 1px;
|
|
||||||
text-shadow: #888 0 0 2px;
|
|
||||||
transition: text-shadow .5s, box-shadow .5s;
|
|
||||||
font-size: 22px;
|
|
||||||
min-width: 120px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="submit"].inputStyling.small,
|
|
||||||
input[type="button"].inputStyling.small,
|
|
||||||
input[type="reset"].inputStyling.small {
|
|
||||||
padding: 0 4px 1px;
|
|
||||||
margin: -2px 0 0;
|
|
||||||
font-size: 16px;
|
|
||||||
border-radius: 0;
|
|
||||||
min-width: 80px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="submit"].inputStyling:hover,
|
|
||||||
input[type="button"].inputStyling:hover,
|
|
||||||
input[type="reset"].inputStyling:hover {
|
|
||||||
box-shadow: inset #222 0 0 3px;
|
|
||||||
text-shadow: #F1F1F1 0 0 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="submit"].inputStyling:active,
|
|
||||||
input[type="button"].inputStyling:active,
|
|
||||||
input[type="reset"].inputStyling:active {
|
|
||||||
box-shadow: inset #222 0 0 5px;
|
|
||||||
text-shadow: #F1F1F1 0 0 3px;
|
|
||||||
transition: text-shadow .2s, box-shadow .2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="text"].inputStyling,
|
|
||||||
input[type="password"].inputStyling ,
|
|
||||||
input[type="date"].inputStyling {
|
|
||||||
padding: 3px 4px;
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
box-shadow: inset #DDD 0 0 5px;
|
|
||||||
background: linear-gradient(180deg, #FFF 0%, #EEE 50%, #E5E5E5 50%) #FFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="text"].inputStyling.red,
|
|
||||||
input[type="password"].inputStyling.red,
|
|
||||||
input[type="date"].inputStyling.red {
|
|
||||||
box-shadow: inset 0px 0px 7px #EB5959;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="text"].inputStyling.green,
|
|
||||||
input[type="password"].inputStyling.green,
|
|
||||||
input[type="date"].inputStyling.green {
|
|
||||||
box-shadow: inset 0px 0px 7px #A9EC8B;
|
|
||||||
}
|
|
||||||
|
|
||||||
textarea.inputStyling {
|
|
||||||
padding: 3px 4px;
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
box-shadow: inset #DDD 0 0 5px;
|
|
||||||
background: linear-gradient(180deg, #FFF 0%, #EEE 50%, #E5E5E5 50%) #FFF;
|
|
||||||
}
|
|
|
@ -1,71 +0,0 @@
|
||||||
/*
|
|
||||||
* Animation Keyframes
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
/* Spin */
|
|
||||||
@keyframes spin {
|
|
||||||
|
|
||||||
0% {
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fade out */
|
|
||||||
@keyframes fadeOut {
|
|
||||||
|
|
||||||
0% {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
opacity: 0;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fade in */
|
|
||||||
@keyframes fadeIn {
|
|
||||||
|
|
||||||
0% {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
opacity: 1;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Slide in from right */
|
|
||||||
@keyframes slideInFromRight { /* Requires position: relative to be set on the element */
|
|
||||||
|
|
||||||
0% {
|
|
||||||
right: -100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
right: 0%;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Slide out to bottom */
|
|
||||||
@keyframes slideOutToBottom { /* Read comment above */
|
|
||||||
|
|
||||||
0% {
|
|
||||||
bottom: 0%;
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
bottom: -100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,103 +0,0 @@
|
||||||
/*
|
|
||||||
* Members page Styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
.membersPage {
|
|
||||||
width: 100%;
|
|
||||||
padding: 10px 0;
|
|
||||||
overflow: hidden;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage a {
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .userBox {
|
|
||||||
background: linear-gradient(180deg, #C2AFFE, #B19EED) no-repeat scroll left top / cover #C2AFFE;
|
|
||||||
margin: 7px;
|
|
||||||
border-radius: 5px;
|
|
||||||
text-align: center;
|
|
||||||
box-shadow: 0 0 .5em #000;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
transition: box-shadow .2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .userBox {
|
|
||||||
padding: 10px;
|
|
||||||
line-height: 330%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .userBox:hover {
|
|
||||||
box-shadow: 0 0 1em #000;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .userBox:active {
|
|
||||||
box-shadow: 0 0 1.5em #609;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .userBox img {
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .userBox .userBoxUserName {
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .boxes .userBox {
|
|
||||||
width: 200px;
|
|
||||||
height: 230px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .boxes .userBox img {
|
|
||||||
width: 200px;
|
|
||||||
height: 200px;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .rectangles .userBox {
|
|
||||||
width: 300px;
|
|
||||||
height: 100px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .rectangles .userBox img {
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .rectangles .userBox .userBoxUserName {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
padding: 30px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .list table {
|
|
||||||
margin: 10px auto;
|
|
||||||
background: #C2AFFE;
|
|
||||||
box-shadow: 0 0 3px #9475B2;
|
|
||||||
border: 1px solid #9475B2;
|
|
||||||
max-width: 1024px;
|
|
||||||
width: auto;
|
|
||||||
border-radius: 3px;
|
|
||||||
border-spacing: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .list table td,
|
|
||||||
.membersPage .list table th {
|
|
||||||
padding: 4px 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .list thead th {
|
|
||||||
border-bottom: 1px solid #9475B2;
|
|
||||||
background: #A586C4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.membersPage .list tfoot th {
|
|
||||||
border-top: 1px solid #9475B2;
|
|
||||||
background: #A586C4;
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
/*
|
|
||||||
* Private Messages Styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
.messages table {
|
|
||||||
width: 100%;
|
|
||||||
border-spacing: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.messages table > tbody > tr.unread {
|
|
||||||
background: #C2AFFE;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.messages table > tbody > tr > td {
|
|
||||||
border-bottom: 1px solid #B19EED;
|
|
||||||
border-top: 1px solid #B19EED;
|
|
||||||
}
|
|
||||||
|
|
||||||
.messages table > * > tr > td {
|
|
||||||
padding: 0 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.messages table > * > tr > td:first-child {
|
|
||||||
width: 150px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.messages table > tbody > tr > td:first-child {
|
|
||||||
border-left: 1px solid #B19EED;
|
|
||||||
}
|
|
||||||
|
|
||||||
.messages table > * > tr > td:last-child {
|
|
||||||
width: 220px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.messages table > tbody > tr > td:last-child {
|
|
||||||
border-right: 1px solid #B19EED;
|
|
||||||
}
|
|
|
@ -1,74 +0,0 @@
|
||||||
/*
|
|
||||||
* News page styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
.news {
|
|
||||||
min-height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.news-head {
|
|
||||||
margin: -1px -2px;
|
|
||||||
padding: 4px;
|
|
||||||
background: #C2AFFE;
|
|
||||||
font-weight: 700;
|
|
||||||
display: block;
|
|
||||||
font-size: 17px;
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.news-rss {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.news-body {
|
|
||||||
font-size: 10pt;
|
|
||||||
padding: 2px 0 0 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.news-post-time {
|
|
||||||
font-size: 8pt;
|
|
||||||
padding: 6px 15px;
|
|
||||||
text-align: right;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
.news-poster {
|
|
||||||
margin-top: -20px;
|
|
||||||
float: right;
|
|
||||||
text-align: center;
|
|
||||||
width: 140px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.news-poster img {
|
|
||||||
max-width: 120px;
|
|
||||||
max-height: 120px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.news-poster h1 {
|
|
||||||
line-height: 100%;
|
|
||||||
margin: 0;
|
|
||||||
margin-top: -5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
|
|
||||||
.news-poster {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 400px) {
|
|
||||||
|
|
||||||
.news-poster {
|
|
||||||
margin-top: 10px;
|
|
||||||
width: auto;
|
|
||||||
padding: 0 10px 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.news-poster img {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,99 +0,0 @@
|
||||||
/*
|
|
||||||
* Notification styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
#notifications {
|
|
||||||
position: fixed;
|
|
||||||
bottom: 5px;
|
|
||||||
right: 5px;
|
|
||||||
z-index: 3;
|
|
||||||
font-family: "Segoe UI", sans-serif;
|
|
||||||
overflow-y: auto;
|
|
||||||
overflow-x: hidden;
|
|
||||||
max-height: 510px;
|
|
||||||
max-width: 600px;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > div {
|
|
||||||
cursor: pointer;
|
|
||||||
text-align: left;
|
|
||||||
display: inline-block;
|
|
||||||
height: 80px;
|
|
||||||
background: rgba(113, 74, 150, .9);
|
|
||||||
border: 1px solid #507;
|
|
||||||
border-right-width: 5px;
|
|
||||||
color: #FFF;
|
|
||||||
padding: 2px 0 2px 2px;
|
|
||||||
margin: 5px;
|
|
||||||
position: relative;
|
|
||||||
box-shadow: 0 0 4px rgba(0, 0, 0, .9);
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > .notification-enter {
|
|
||||||
animation: slideInFromRight 1 .4s, fadeIn 1 .4s;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > .notification-exit {
|
|
||||||
animation: slideOutToBottom 1 .4s, fadeOut 1 .4s;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > div > .notification-icon {
|
|
||||||
float: left;
|
|
||||||
width: 80px;
|
|
||||||
height: 80px;
|
|
||||||
text-align: center;
|
|
||||||
background: rgba(0, 0, 0, .5);
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > div > .notification-icon > img {
|
|
||||||
max-height: 80px;
|
|
||||||
max-width: 80px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > div > .notification-icon > .font-icon {
|
|
||||||
margin: .34em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > div > .notification-content {
|
|
||||||
float: left;
|
|
||||||
min-width: 350px;
|
|
||||||
max-width: 450px;
|
|
||||||
padding-right: 6px;
|
|
||||||
border-left: 1px solid rgb(85, 0, 119);
|
|
||||||
height: 80px;
|
|
||||||
margin-left: 2px;
|
|
||||||
padding-left: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > div > .notification-content > .notification-title {
|
|
||||||
font-weight: 300;
|
|
||||||
font-size: 1.7em;
|
|
||||||
margin-top: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > div > .notification-close:before {
|
|
||||||
font-family: FontAwesome;
|
|
||||||
content: "\f00d";
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > div > .notification-close {
|
|
||||||
font-size: 2em;
|
|
||||||
float: right;
|
|
||||||
height: 80px;
|
|
||||||
width: 20px;
|
|
||||||
background: #507;
|
|
||||||
margin-top: -3px;
|
|
||||||
padding-bottom: 6px;
|
|
||||||
padding-left: 2px;
|
|
||||||
border-left: 3px solid #507;
|
|
||||||
line-height: 3.4em;
|
|
||||||
text-align: center;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications > div:hover > .notification-close {
|
|
||||||
display: block;
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
/*
|
|
||||||
* Profile page Styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
.profile .content-left {
|
|
||||||
max-height: 800px;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.profile .user-actions {
|
|
||||||
font-size: 3em;
|
|
||||||
line-height: 1.4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.profile .user-actions a {
|
|
||||||
color: #8364A1;
|
|
||||||
text-decoration: none;
|
|
||||||
text-shadow: 0 0 2px #9475B2;
|
|
||||||
transition: all .2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.profile .user-actions a:hover {
|
|
||||||
text-shadow: 0 0 6px #9475B2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.profile .user-actions a:active {
|
|
||||||
color: #725390;
|
|
||||||
text-shadow: 0 0 8px #8364A1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 1024px) {
|
|
||||||
|
|
||||||
.content {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content .content-right {
|
|
||||||
width: 100%;
|
|
||||||
min-height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content .content-left {
|
|
||||||
width: 100%;
|
|
||||||
min-height: 0;
|
|
||||||
border-top: 1px solid #9475B2;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
/*
|
|
||||||
* Settings page styling
|
|
||||||
*/
|
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
.settings .right-menu-nav > div {
|
|
||||||
background: #C2AFFE;
|
|
||||||
padding: 4px;
|
|
||||||
margin: -1px -2px;
|
|
||||||
font-weight: 700;
|
|
||||||
display: block;
|
|
||||||
font-size: 17px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .right-menu-nav > a {
|
|
||||||
display: block;
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 25px;
|
|
||||||
color: #22E;
|
|
||||||
text-decoration: none;
|
|
||||||
padding-left: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .right-menu-nav > a:hover {
|
|
||||||
color: #22E;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .right-menu-nav > a:active {
|
|
||||||
color: #E22;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .settings-explanation {
|
|
||||||
font-size: 11px;
|
|
||||||
line-height: 18px;
|
|
||||||
padding: 7px;
|
|
||||||
border-bottom: 1px solid #C2AFFE;
|
|
||||||
margin-bottom: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .settings-table {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .settings-table tr > th {
|
|
||||||
font-size: 17px;
|
|
||||||
background: #C2AFFE;
|
|
||||||
padding: 4px;
|
|
||||||
margin: -1px -2px;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .settings-table tr > td {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .settings-table > tbody > tr:not(:last-child) > td {
|
|
||||||
border-bottom: 1px solid #C2AFFE;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .settings-table tr.current-session > td {
|
|
||||||
background: #B39EED;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .profile-field {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .profile-field > div:nth-child(2) > input {
|
|
||||||
width: calc(100% - 16px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .profile-save {
|
|
||||||
text-align: center;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings .background-frame {
|
|
||||||
max-width: 600px;
|
|
||||||
max-height: 400px;
|
|
||||||
border: 3px solid #EEE;
|
|
||||||
background: #EEE;
|
|
||||||
box-shadow: 0 3px 7px #888;
|
|
||||||
border-radius: 3px;
|
|
||||||
margin: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings form {
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -1 +0,0 @@
|
||||||
# Profile background directory
|
|
BIN
content/images/triangles.png
Normal file
BIN
content/images/triangles.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 252 KiB |
|
@ -54,6 +54,11 @@ RewriteRule ^members/([a-z]+)/([0-9]+)/p([0-9]+)/?$ members.php?sort=$1&rank=$2&
|
||||||
RewriteRule ^u/?$ profile.php
|
RewriteRule ^u/?$ profile.php
|
||||||
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)/?$ profile.php?u=$1
|
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)/?$ profile.php?u=$1
|
||||||
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)/api/?$ profile.php?data
|
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)/api/?$ profile.php?data
|
||||||
|
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)/header/?$ imageserve.php?m=header&u=$1
|
||||||
|
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)/groups/?$ profile.php?u=$1&view=groups
|
||||||
|
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)/friends/?$ profile.php?u=$1$view=friends
|
||||||
|
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)/threads/?$ profile.php?u=$1$view=threads
|
||||||
|
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)/posts/?$ profile.php?u=$1$view=posts
|
||||||
|
|
||||||
# Serving Images
|
# Serving Images
|
||||||
RewriteRule ^a/([0-9]+)$|a/([0-9]+).png$ imageserve.php?m=avatar&u=$1
|
RewriteRule ^a/([0-9]+)$|a/([0-9]+).png$ imageserve.php?m=avatar&u=$1
|
||||||
|
|
|
@ -95,7 +95,7 @@ if(isset($_REQUEST['mode'])) {
|
||||||
$messages = [
|
$messages = [
|
||||||
'USER_NOT_LOGIN' => 'What are you doing, you\'re not even logged in. GO AWAY!',
|
'USER_NOT_LOGIN' => 'What are you doing, you\'re not even logged in. GO AWAY!',
|
||||||
'INCORRECT_PASSWORD' => 'The password you entered was invalid.',
|
'INCORRECT_PASSWORD' => 'The password you entered was invalid.',
|
||||||
'NOT_ALLOWED' => 'Your account does not have the required permissions to log in.',
|
'NOT_ALLOWED' => 'Your account does not have the required permissions to change your password.',
|
||||||
'NO_LOGIN' => 'Logging into this account is disabled.',
|
'NO_LOGIN' => 'Logging into this account is disabled.',
|
||||||
'PASS_TOO_SHIT' => 'Your password is too weak, try adding some special characters.',
|
'PASS_TOO_SHIT' => 'Your password is too weak, try adding some special characters.',
|
||||||
'PASS_NOT_MATCH' => 'Passwords do not match.',
|
'PASS_NOT_MATCH' => 'Passwords do not match.',
|
||||||
|
@ -198,7 +198,7 @@ if(isset($_REQUEST['mode'])) {
|
||||||
'AUTH_LOCKED' => 'Authentication is currently not allowed, try again later.',
|
'AUTH_LOCKED' => 'Authentication is currently not allowed, try again later.',
|
||||||
'USER_NOT_EXIST' => 'The user you tried to log into does not exist.',
|
'USER_NOT_EXIST' => 'The user you tried to log into does not exist.',
|
||||||
'INCORRECT_PASSWORD' => 'The password you entered was invalid.',
|
'INCORRECT_PASSWORD' => 'The password you entered was invalid.',
|
||||||
'DEACTIVATED' => 'Your account is deactivated.',
|
'NOT_ALLOWED' => 'Your account does not have the required permissions to log in.',
|
||||||
'NO_LOGIN' => 'Logging into this account is disabled.',
|
'NO_LOGIN' => 'Logging into this account is disabled.',
|
||||||
'LEGACY_SUCCESS' => 'Login successful! Taking you to the password changing page...',
|
'LEGACY_SUCCESS' => 'Login successful! Taking you to the password changing page...',
|
||||||
'LOGIN_SUCESS' => 'Login successful!'
|
'LOGIN_SUCESS' => 'Login successful!'
|
||||||
|
@ -274,7 +274,7 @@ if(isset($_REQUEST['mode'])) {
|
||||||
$messages = [
|
$messages = [
|
||||||
'AUTH_LOCKED' => 'Authentication is currently not allowed, try again later.',
|
'AUTH_LOCKED' => 'Authentication is currently not allowed, try again later.',
|
||||||
'USER_NOT_EXIST' => 'The requested user does not exist (confirm the username/email combination).',
|
'USER_NOT_EXIST' => 'The requested user does not exist (confirm the username/email combination).',
|
||||||
'DEACTIVATED' => 'Your account is deactivated.',
|
'NOT_ALLOWED' => 'Your account does not have the required permissions to change your password.',
|
||||||
'SUCCESS' => 'The password reset e-mail has been sent to the address associated with your account.'
|
'SUCCESS' => 'The password reset e-mail has been sent to the address associated with your account.'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,9 @@ require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) .'_sakura/sak
|
||||||
// Set Content type
|
// Set Content type
|
||||||
header('Content-Type: application/octet-stream');
|
header('Content-Type: application/octet-stream');
|
||||||
|
|
||||||
|
// Path to user uploads
|
||||||
|
$userDirPath = ROOT .'content/images/user/';
|
||||||
|
|
||||||
// Check if the m(ode) GET request is set
|
// Check if the m(ode) GET request is set
|
||||||
if(isset($_GET['m'])) {
|
if(isset($_GET['m'])) {
|
||||||
|
|
||||||
|
@ -22,7 +25,6 @@ if(isset($_GET['m'])) {
|
||||||
$noAvatar = ROOT .'content/images/no-av.png';
|
$noAvatar = ROOT .'content/images/no-av.png';
|
||||||
$deactiveAvatar = ROOT .'content/images/deactivated-av.png';
|
$deactiveAvatar = ROOT .'content/images/deactivated-av.png';
|
||||||
$bannedAvatar = ROOT .'content/images/banned-av.png';
|
$bannedAvatar = ROOT .'content/images/banned-av.png';
|
||||||
$avatarDirPath = ROOT .'content/images/avatars/';
|
|
||||||
|
|
||||||
// If ?u= isn't set or if it isn't numeric
|
// If ?u= isn't set or if it isn't numeric
|
||||||
if(!isset($_GET['u']) || !is_numeric($_GET['u'])) {
|
if(!isset($_GET['u']) || !is_numeric($_GET['u'])) {
|
||||||
|
@ -32,6 +34,7 @@ if(isset($_GET['m'])) {
|
||||||
|
|
||||||
// Get user data
|
// Get user data
|
||||||
$user = Users::getUser($_GET['u']);
|
$user = Users::getUser($_GET['u']);
|
||||||
|
$data = Users::getUserProfileData($user, true);
|
||||||
|
|
||||||
// If user is deactivated use deactive avatar
|
// If user is deactivated use deactive avatar
|
||||||
if(Users::checkIfUserHasRanks([0, 1], $user, true)) {
|
if(Users::checkIfUserHasRanks([0, 1], $user, true)) {
|
||||||
|
@ -46,19 +49,18 @@ if(isset($_GET['m'])) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if user has an avatar set
|
// Check if user has an avatar set
|
||||||
if(empty($user['avatar_url']) || !file_exists($avatarDirPath . $user['avatar_url'])) {
|
if(empty($data['userAvatar']) || !file_exists($userDirPath . $data['userAvatar'])) {
|
||||||
$serveImage = $noAvatar;
|
$serveImage = $noAvatar;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the avatar exist and assign it to a value
|
// Check if the avatar exist and assign it to a value
|
||||||
$serveImage = $avatarDirPath . $user['avatar_url'];
|
$serveImage = $userDirPath . $data['userAvatar'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'background':
|
case 'background':
|
||||||
// Set paths
|
// Set paths
|
||||||
$noBackground = ROOT .'content/pixel.png';
|
$noBackground = ROOT .'content/pixel.png';
|
||||||
$bgDirPath = ROOT .'content/images/backgrounds/';
|
|
||||||
|
|
||||||
// If ?u= isn't set or if it isn't numeric
|
// If ?u= isn't set or if it isn't numeric
|
||||||
if(!isset($_GET['u']) || !is_numeric($_GET['u'])) {
|
if(!isset($_GET['u']) || !is_numeric($_GET['u'])) {
|
||||||
|
@ -68,15 +70,64 @@ if(isset($_GET['m'])) {
|
||||||
|
|
||||||
// Get user data
|
// Get user data
|
||||||
$user = Users::getUser($_GET['u']);
|
$user = Users::getUser($_GET['u']);
|
||||||
|
$data = Users::getUserProfileData($user, true);
|
||||||
|
|
||||||
// Check if user has an avatar set
|
// If user is deactivated use deactive avatar
|
||||||
if(empty($user['background_url']) || !file_exists($bgDirPath . $user['background_url'])) {
|
if(Users::checkIfUserHasRanks([0, 1], $user, true)) {
|
||||||
$serveImage = $noAvatar;
|
$serveImage = $noBackground;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if user is banned
|
||||||
|
if(false) { // [Flashwave 2015-04-27] Banning isn't implemented yet
|
||||||
|
$serveImage = $noBackground;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if user has a background set
|
||||||
|
if(empty($data['profileBackground']) || !file_exists($userDirPath . $data['profileBackground'])) {
|
||||||
|
$serveImage = $noBackground;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the avatar exist and assign it to a value
|
// Check if the avatar exist and assign it to a value
|
||||||
$serveImage = $bgDirPath . $user['background_url'];
|
$serveImage = $userDirPath . $data['profileBackground'];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'header':
|
||||||
|
// Set paths
|
||||||
|
$noHeader = ROOT .'content/images/triangles.png';
|
||||||
|
|
||||||
|
// If ?u= isn't set or if it isn't numeric
|
||||||
|
if(!isset($_GET['u']) || !is_numeric($_GET['u'])) {
|
||||||
|
$serveImage = $noHeader;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get user data
|
||||||
|
$user = Users::getUser($_GET['u']);
|
||||||
|
$data = Users::getUserProfileData($user, true);
|
||||||
|
|
||||||
|
// If user is deactivated use deactive avatar
|
||||||
|
if(Users::checkIfUserHasRanks([0, 1], $user, true)) {
|
||||||
|
$serveImage = $noHeader;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if user is banned
|
||||||
|
if(false) { // [Flashwave 2015-04-27] Banning isn't implemented yet
|
||||||
|
$serveImage = $noHeader;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if user has a background set
|
||||||
|
if(empty($data['profileHeader']) || !file_exists($userDirPath . $data['profileHeader'])) {
|
||||||
|
$serveImage = $noHeader;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the avatar exist and assign it to a value
|
||||||
|
$serveImage = $userDirPath . $data['profileHeader'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -8,7 +8,7 @@ namespace Sakura;
|
||||||
|
|
||||||
// Include components
|
// Include components
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) .'_sakura/sakura.php';
|
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) .'_sakura/sakura.php';
|
||||||
|
//print Permissions::check('SITE', 'USE_CHAT', Session::$userId, 1);
|
||||||
// Add page specific things
|
// Add page specific things
|
||||||
$renderData['newsPosts'] = Main::getNewsPosts(3);
|
$renderData['newsPosts'] = Main::getNewsPosts(3);
|
||||||
$renderData['page'] = [
|
$renderData['page'] = [
|
||||||
|
|
|
@ -19,7 +19,7 @@ $renderData['page'] = [
|
||||||
'sort' => isset($_GET['sort']) && $_GET['sort'] && in_array($_GET['sort'], $_MEMBERLIST_SORTS) ? $_GET['sort'] : $_MEMBERLIST_SORTS[0],
|
'sort' => isset($_GET['sort']) && $_GET['sort'] && in_array($_GET['sort'], $_MEMBERLIST_SORTS) ? $_GET['sort'] : $_MEMBERLIST_SORTS[0],
|
||||||
'title' => isset($_GET['rank']) && $_GET['rank'] && !$_MEMBERLIST_NFOUND ? 'Viewing '. $_MEMBERLIST_RANKS[$_GET['rank']]['name'] . ($_MEMBERLIST_RANKS[$_GET['rank']]['multi'] ? 's' : '') : 'Member List',
|
'title' => isset($_GET['rank']) && $_GET['rank'] && !$_MEMBERLIST_NFOUND ? 'Viewing '. $_MEMBERLIST_RANKS[$_GET['rank']]['name'] . ($_MEMBERLIST_RANKS[$_GET['rank']]['multi'] ? 's' : '') : 'Member List',
|
||||||
'page' => isset($_GET['page']) && ($_GET['page'] - 1) >= 0 ? $_GET['page'] - 1 : 0,
|
'page' => isset($_GET['page']) && ($_GET['page'] - 1) >= 0 ? $_GET['page'] - 1 : 0,
|
||||||
'users' => array_chunk($_MEMBERLIST_ACTIVE && !$_MEMBERLIST_NFOUND ? Users::getUsersInRank($_MEMBERLIST_ACTIVE) : Users::getAllUsers(), 30, true)
|
'users' => array_chunk($_MEMBERLIST_ACTIVE && !$_MEMBERLIST_NFOUND ? Users::getUsersInRank($_MEMBERLIST_ACTIVE, null, true, true) : Users::getAllUsers(), 30, true)
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -25,22 +25,23 @@ if(isset($_REQUEST['data'])) {
|
||||||
if(isset($_GET['u'])) {
|
if(isset($_GET['u'])) {
|
||||||
|
|
||||||
$renderData['profile'] = [
|
$renderData['profile'] = [
|
||||||
'notset' => false,
|
'notset' => false,
|
||||||
'user' => ($_PROFILE_USER_DATA = Users::getUser(($_USER_USERNAME_ID = Users::userExists($_GET['u'], false)) ? $_USER_USERNAME_ID : $_GET['u'])),
|
'user' => ($_PROFILE_USER_DATA = Users::getUser(($_USER_USERNAME_ID = Users::userExists($_GET['u'], false)) ? $_USER_USERNAME_ID : $_GET['u'])),
|
||||||
'rank' => ($_PROFILE_RANK_DATA = Users::getRank($_PROFILE_USER_DATA['rank_main'])),
|
'rank' => ($_PROFILE_RANK_DATA = Users::getRank($_PROFILE_USER_DATA['rank_main'])),
|
||||||
'colour' => ($_PROFILE_USER_DATA['name_colour'] == null ? $_PROFILE_RANK_DATA['colour'] : $_PROFILE_USER_DATA['name_colour']),
|
'colour' => ($_PROFILE_USER_DATA['name_colour'] == null ? $_PROFILE_RANK_DATA['colour'] : $_PROFILE_USER_DATA['name_colour']),
|
||||||
'ranktitle' => ($_PROFILE_USER_DATA['usertitle'] == null ? $_PROFILE_RANK_DATA['title'] : $_PROFILE_USER_DATA['usertitle']),
|
'ranktitle' => ($_PROFILE_USER_DATA['usertitle'] == null ? $_PROFILE_RANK_DATA['title'] : $_PROFILE_USER_DATA['usertitle']),
|
||||||
'country' => Main::getCountryName($_PROFILE_USER_DATA['country']),
|
'data' => ($_PROFILE_PROFILE_DATA = Users::getUserProfileData($_PROFILE_USER_DATA, true)),
|
||||||
'istenshi' => Users::checkUserTenshi($_PROFILE_USER_DATA['id']),
|
'country' => Main::getCountryName($_PROFILE_USER_DATA['country']),
|
||||||
'online' => Users::checkUserOnline($_PROFILE_USER_DATA['id']),
|
'istenshi' => Users::checkUserTenshi($_PROFILE_USER_DATA['id']),
|
||||||
'profpage' => Main::mdParse(base64_decode($_PROFILE_USER_DATA['profile_md'])),
|
'online' => Users::checkUserOnline($_PROFILE_USER_DATA['id']),
|
||||||
'data' => Users::getUserProfileData($_PROFILE_USER_DATA['id']),
|
'profilePage' => Users::getProfilePage($_PROFILE_PROFILE_DATA, true),
|
||||||
'warnings' => Users::getWarnings($_PROFILE_USER_DATA['id'])
|
'fields' => Users::getUserProfileFields($_PROFILE_PROFILE_DATA, true),
|
||||||
|
'warnings' => Users::getWarnings($_PROFILE_USER_DATA['id'])
|
||||||
];
|
];
|
||||||
|
|
||||||
$renderData['page'] = [
|
$renderData['page'] = [
|
||||||
'title' => ($_PROFILE_USER_DATA['id'] < 1 || $_PROFILE_USER_DATA['password_algo'] == 'nologin' ? 'User not found!' : 'Profile of '. $_PROFILE_USER_DATA['username']),
|
'title' => ($_PROFILE_USER_DATA['id'] < 1 || $_PROFILE_USER_DATA['password_algo'] == 'nologin' ? 'User not found!' : 'Profile of '. $_PROFILE_USER_DATA['username']),
|
||||||
'style' => ($_PROFILE_USER_DATA['background_url'] ? [
|
'style' => (!empty($_PROFILE_PROFILE_DATA['profileBackground']) ? [
|
||||||
'#userBackground' => [
|
'#userBackground' => [
|
||||||
'background' => 'url("/bg/'. $_PROFILE_USER_DATA['id'] .'") no-repeat center center / cover transparent !important',
|
'background' => 'url("/bg/'. $_PROFILE_USER_DATA['id'] .'") no-repeat center center / cover transparent !important',
|
||||||
'position' => 'fixed',
|
'position' => 'fixed',
|
||||||
|
@ -49,9 +50,6 @@ if(isset($_GET['u'])) {
|
||||||
'right' => '0',
|
'right' => '0',
|
||||||
'left' => '0',
|
'left' => '0',
|
||||||
'z-index' => '-1'
|
'z-index' => '-1'
|
||||||
],
|
|
||||||
'.profile' => [
|
|
||||||
'background' => 'rgba(211, 191, 255, .8) !important'
|
|
||||||
]
|
]
|
||||||
] : null)
|
] : null)
|
||||||
];
|
];
|
||||||
|
|
Reference in a new issue