heliotrope
This commit is contained in:
parent
0067f88197
commit
4039201e7a
18 changed files with 618 additions and 93 deletions
|
@ -5,9 +5,7 @@ SET time_zone = '+00:00';
|
||||||
SET foreign_key_checks = 0;
|
SET foreign_key_checks = 0;
|
||||||
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||||
|
|
||||||
DROP DATABASE IF EXISTS `sakura`;
|
USE `flashiidev`;
|
||||||
CREATE DATABASE `sakura` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;
|
|
||||||
USE `sakura`;
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `fii_actioncodes`;
|
DROP TABLE IF EXISTS `fii_actioncodes`;
|
||||||
CREATE TABLE `fii_actioncodes` (
|
CREATE TABLE `fii_actioncodes` (
|
||||||
|
@ -17,7 +15,7 @@ CREATE TABLE `fii_actioncodes` (
|
||||||
`actkey` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'The URL key for using this code.',
|
`actkey` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'The URL key for using this code.',
|
||||||
`instruction` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Things the backend should do upon using this code',
|
`instruction` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Things the backend should do upon using this code',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `fii_apikeys`;
|
DROP TABLE IF EXISTS `fii_apikeys`;
|
||||||
|
@ -50,34 +48,6 @@ CREATE TABLE `fii_config` (
|
||||||
`config_value` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'The value, obviously.'
|
`config_value` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'The value, obviously.'
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
|
||||||
TRUNCATE `fii_config`;
|
|
||||||
INSERT INTO `fii_config` (`config_name`, `config_value`) VALUES
|
|
||||||
('recaptcha_public', ''),
|
|
||||||
('recaptcha_private', ''),
|
|
||||||
('charset', 'utf-8'),
|
|
||||||
('cookie_prefix', ''),
|
|
||||||
('cookie_domain', ''),
|
|
||||||
('cookie_path', '/'),
|
|
||||||
('site_style', 'yuuno'),
|
|
||||||
('manage_style', 'Manage'),
|
|
||||||
('allow_registration', '0'),
|
|
||||||
('smtp_server', ''),
|
|
||||||
('smtp_auth', ''),
|
|
||||||
('smtp_secure', ''),
|
|
||||||
('smtp_port', ''),
|
|
||||||
('smtp_username', ''),
|
|
||||||
('smtp_password', ''),
|
|
||||||
('smtp_replyto_mail', ''),
|
|
||||||
('smtp_replyto_name', ''),
|
|
||||||
('smtp_from_email', ''),
|
|
||||||
('smtp_from_name', 'Sakura Noreply'),
|
|
||||||
('sitename', 'Sakura'),
|
|
||||||
('recaptcha', '1'),
|
|
||||||
('require_activation', '1'),
|
|
||||||
('require_registration_code', '0'),
|
|
||||||
('disable_registration', '1'),
|
|
||||||
('max_reg_keys', '5'),
|
|
||||||
('mail_signature', 'Team Flashii');
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `fii_infopages`;
|
DROP TABLE IF EXISTS `fii_infopages`;
|
||||||
CREATE TABLE `fii_infopages` (
|
CREATE TABLE `fii_infopages` (
|
||||||
|
@ -117,24 +87,26 @@ CREATE TABLE `fii_profilefields` (
|
||||||
`id` int(64) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID used for ordering on the userpage.',
|
`id` int(64) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID used for ordering on the userpage.',
|
||||||
`name` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Name of the field.',
|
`name` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Name of the field.',
|
||||||
`formtype` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Type attribute in the input element.',
|
`formtype` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Type attribute in the input element.',
|
||||||
|
`islink` tinyint(1) unsigned NOT NULL COMMENT 'Set if this value should be put in a href.',
|
||||||
|
`linkformat` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'If the form is a link how should it be formatted? {{ VAL }} gets replace with the value.',
|
||||||
`description` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Description of the field displayed in the control panel.',
|
`description` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Description of the field displayed in the control panel.',
|
||||||
`additional` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Undocumented JSON array containing special options if needed (probably only going to be used for the YouTube field).',
|
`additional` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Undocumented JSON array containing special options if needed (probably only going to be used for the YouTube field).',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
|
||||||
TRUNCATE `fii_profilefields`;
|
TRUNCATE `fii_profilefields`;
|
||||||
INSERT INTO `fii_profilefields` (`id`, `name`, `formtype`, `description`, `additional`) VALUES
|
INSERT INTO `fii_profilefields` (`id`, `name`, `formtype`, `islink`, `linkformat`, `description`, `additional`) VALUES
|
||||||
(1, 'Website', 'url', 'URL to your website', ''),
|
(1, 'Website', 'url', 1, '{{ VAL }}', 'URL to your website', ''),
|
||||||
(2, 'Twitter', 'text', 'Your @twitter Username', ''),
|
(2, 'Twitter', 'text', 1, 'https://twitter.com/{{ VAL }}', 'Your @twitter Username', ''),
|
||||||
(3, 'GitHub', 'text', 'Your GitHub Username', ''),
|
(3, 'GitHub', 'text', 1, 'https://github.com/{{ VAL }}', 'Your GitHub Username', ''),
|
||||||
(4, 'Skype', 'text', 'Your Skype Username', ''),
|
(4, 'Skype', 'text', 1, 'skype:{{ VAL }}?userinfo', 'Your Skype Username', ''),
|
||||||
(5, 'YouTube', 'text', 'ID or Username excluding http://youtube.com/*/', '{\"youtubetype\": [\"checkbox\", \"I <b>don\'t</b> have a Channel Username (url looks like https://www.youtube.com/channel/UCXZcw5hw5C7Neto-T_nRXBQ).\"]}'),
|
(5, 'YouTube', 'text', 0, '', 'ID or Username excluding http://youtube.com/*/', '{\"youtubetype\": [\"checkbox\", \"I <b>don\'t</b> have a Channel Username (url looks like https://www.youtube.com/channel/UCXZcw5hw5C7Neto-T_nRXBQ).\"]}'),
|
||||||
(6, 'SoundCloud', 'text', 'Your SoundCloud username', ''),
|
(6, 'SoundCloud', 'text', 1, 'https://soundcloud.com/{{ VAL }}', 'Your SoundCloud username', ''),
|
||||||
(7, 'Steam', 'text', 'Your Steam Community Username (may differ from login username)', ''),
|
(7, 'Steam', 'text', 1, 'https://steamcommunity.com/id/{{ VAL }}', 'Your Steam Community Username (may differ from login username)', ''),
|
||||||
(8, 'osu!', 'text', 'Your osu! Username', ''),
|
(8, 'osu!', 'text', 1, 'https://osu.ppy.sh/u/{{ VAL }}', 'Your osu! Username', ''),
|
||||||
(9, 'Origin', 'text', 'Your Origin User ID', ''),
|
(9, 'Origin', 'text', 0, '', 'Your Origin User ID', ''),
|
||||||
(10, 'Xbox Live', 'text', 'Your Xbox User ID', ''),
|
(10, 'Xbox Live', 'text', 1, 'https://account.xbox.com/en-GB/Profile?Gamertag={{ VAL }}', 'Your Xbox User ID', ''),
|
||||||
(11, 'PSN', 'text', 'Your PSN User ID', '');
|
(11, 'PSN', 'text', 1, 'http://psnprofiles.com/{{ VAL }}', 'Your PSN User ID', '');
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `fii_ranks`;
|
DROP TABLE IF EXISTS `fii_ranks`;
|
||||||
CREATE TABLE `fii_ranks` (
|
CREATE TABLE `fii_ranks` (
|
||||||
|
@ -144,20 +116,21 @@ CREATE TABLE `fii_ranks` (
|
||||||
`colour` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Colour used for the username of a member of this rank.',
|
`colour` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Colour used for the username of a member of this rank.',
|
||||||
`description` text COLLATE utf8_bin NOT NULL COMMENT 'A description of what a user of this rank can do/is supposed to do.',
|
`description` text COLLATE utf8_bin NOT NULL COMMENT 'A description of what a user of this rank can do/is supposed to do.',
|
||||||
`title` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Default user title if user has none set.',
|
`title` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Default user title if user has none set.',
|
||||||
|
`is_premium` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'Flag to set if the user group is a premium group.',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
|
||||||
TRUNCATE `fii_ranks`;
|
TRUNCATE `fii_ranks`;
|
||||||
INSERT INTO `fii_ranks` (`id`, `name`, `multi`, `colour`, `description`, `title`) VALUES
|
INSERT INTO `fii_ranks` (`id`, `name`, `multi`, `colour`, `description`, `title`, `is_premium`) VALUES
|
||||||
(1, 'Deactivated', 0, '#555', 'Users that are yet to be activated or that deactivated their own account.', 'Deactivated'),
|
(1, 'Deactivated', 0, '#555', 'Users that are yet to be activated or that deactivated their own account.', 'Deactivated', 0),
|
||||||
(2, 'Regular user', 1, 'inherit', 'Regular users with regular permissions.', 'Regular user'),
|
(2, 'Regular user', 1, 'inherit', 'Regular users with regular permissions.', 'Regular user', 0),
|
||||||
(3, 'Site moderator', 1, '#0A0', 'Users with special permissions like being able to ban and modify users if needed.', 'Staff'),
|
(3, 'Site moderator', 1, '#0A0', 'Users with special permissions like being able to ban and modify users if needed.', 'Staff', 1),
|
||||||
(4, 'Administrator', 1, '#C00', 'Users that manage the server and everything around that.', 'Administrator'),
|
(4, 'Administrator', 1, '#C00', 'Users that manage the server and everything around that.', 'Administrator', 1),
|
||||||
(5, 'Developer', 1, '#824CA0', 'Users that either create or test new features of the site.', 'Staff'),
|
(5, 'Developer', 1, '#824CA0', 'Users that either create or test new features of the site.', 'Staff', 1),
|
||||||
(6, 'Bot', 1, '#9E8DA7', 'Reserved user accounts for services.', 'Bot'),
|
(6, 'Bot', 1, '#9E8DA7', 'Reserved user accounts for services.', 'Bot', 0),
|
||||||
(7, 'Chat moderator', 1, '#09F', 'Moderators of the chat room.', 'Staff'),
|
(7, 'Chat moderator', 1, '#09F', 'Moderators of the chat room.', 'Staff', 1),
|
||||||
(8, 'Tenshi', 0, '#EE9400', 'Users that donated $5.00 or more in order to keep the site and it\'s services alive!', 'Tenshi'),
|
(8, 'Tenshi', 0, '#EE9400', 'Users that donated $5.00 or more in order to keep the site and it\'s services alive!', 'Tenshi', 1),
|
||||||
(9, 'Alumnii', 0, '#FF69B4', 'People who have contributed to the community but have moved on or resigned.', 'Alumnii');
|
(9, 'Alumnii', 0, '#FF69B4', 'People who have contributed to the community but have moved on or resigned.', 'Alumnii', 1);
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `fii_regcodes`;
|
DROP TABLE IF EXISTS `fii_regcodes`;
|
||||||
CREATE TABLE `fii_regcodes` (
|
CREATE TABLE `fii_regcodes` (
|
||||||
|
@ -181,7 +154,7 @@ CREATE TABLE `fii_sessions` (
|
||||||
`expire` int(64) unsigned NOT NULL COMMENT 'The timestamp for when this session should end, -1 for permanent. ',
|
`expire` int(64) unsigned NOT NULL COMMENT 'The timestamp for when this session should end, -1 for permanent. ',
|
||||||
`remember` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'If set to 1 session will be extended each time a page is loaded.',
|
`remember` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'If set to 1 session will be extended each time a page is loaded.',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `fii_tenshi`;
|
DROP TABLE IF EXISTS `fii_tenshi`;
|
||||||
|
@ -223,7 +196,7 @@ CREATE TABLE `fii_users` (
|
||||||
`profile_data` text COLLATE utf8_bin NOT NULL COMMENT 'Modular array containing profile data.',
|
`profile_data` text COLLATE utf8_bin NOT NULL COMMENT 'Modular array containing profile data.',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `username_clean` (`username_clean`)
|
UNIQUE KEY `username_clean` (`username_clean`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `fii_warnings`;
|
DROP TABLE IF EXISTS `fii_warnings`;
|
||||||
|
@ -238,4 +211,4 @@ CREATE TABLE `fii_warnings` (
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
|
||||||
|
|
||||||
-- 2015-04-19 12:58:09
|
-- 2015-04-27 00:38:20
|
||||||
|
|
|
@ -2,10 +2,22 @@
|
||||||
|
|
||||||
"versions": {
|
"versions": {
|
||||||
|
|
||||||
|
"Heliotrope": {
|
||||||
|
|
||||||
|
"colour": "#DF73FF",
|
||||||
|
|
||||||
|
"builds": [
|
||||||
|
|
||||||
|
"20150427"
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
"Cyan": {
|
"Cyan": {
|
||||||
|
|
||||||
"colour": "#4EC9B0",
|
"colour": "#4EC9B0",
|
||||||
|
|
||||||
"builds": [
|
"builds": [
|
||||||
|
|
||||||
"20150221",
|
"20150221",
|
||||||
|
@ -34,7 +46,7 @@
|
||||||
"20150426"
|
"20150426"
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
@ -594,10 +606,6 @@
|
||||||
|
|
||||||
"20150426": [
|
"20150426": [
|
||||||
|
|
||||||
{
|
|
||||||
"type": "ADD",
|
|
||||||
"change": "Begin work on profile system."
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "FIX",
|
"type": "FIX",
|
||||||
"change": "The system thinking 0 is the rank ID for deactivated while it's 1."
|
"change": "The system thinking 0 is the rank ID for deactivated while it's 1."
|
||||||
|
@ -611,6 +619,59 @@
|
||||||
"change": "Add changelog page."
|
"change": "Add changelog page."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
"20150427": [
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"change": "Begin work on profile system."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"change": "Created function to get profile data from a user."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "UPD",
|
||||||
|
"change": "Made profile data display properly."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIX",
|
||||||
|
"change": "Fix rank title not displaying on profiles."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"change": "Show country name on profile."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"change": "Show tenshi tag on user's profile if they're tenshi."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIX",
|
||||||
|
"change": "Actually update last online date."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIX",
|
||||||
|
"change": "Activation broken methods in the activation process."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"change": "Add glow around a user's avatar on their profile if they're online or offline (active in the last 5 minutes)."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"change": "Show all online users on the frontpage."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIX",
|
||||||
|
"change": "Fix JavaScript forms not submitting on hitting enter."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIX",
|
||||||
|
"change": "Fix chat redirect."
|
||||||
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -199,14 +199,22 @@ class Main {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleaning strings
|
// Cleaning strings
|
||||||
public static function cleanString($string, $lower = false) {
|
public static function cleanString($string, $lower = false, $nospecial = false) {
|
||||||
|
|
||||||
|
// Run common sanitisation function over string
|
||||||
$string = htmlentities($string, ENT_QUOTES | ENT_IGNORE, Configuration::getConfig('charset'));
|
$string = htmlentities($string, ENT_QUOTES | ENT_IGNORE, Configuration::getConfig('charset'));
|
||||||
$string = stripslashes($string);
|
$string = stripslashes($string);
|
||||||
$string = strip_tags($string);
|
$string = strip_tags($string);
|
||||||
|
|
||||||
|
// If set also make the string lowercase
|
||||||
if($lower)
|
if($lower)
|
||||||
$string = strtolower($string);
|
$string = strtolower($string);
|
||||||
|
|
||||||
|
// If set remove all characters that aren't a-z or 0-9
|
||||||
|
if($nospecial)
|
||||||
|
$string = preg_replace('/[^a-z0-9]/', '', $string);
|
||||||
|
|
||||||
|
// Return clean string
|
||||||
return $string;
|
return $string;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -481,4 +489,18 @@ class Main {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get country name from ISO 3166 code
|
||||||
|
public static function getCountryName($code) {
|
||||||
|
|
||||||
|
// Parse JSON file
|
||||||
|
$iso3166 = json_decode(file_get_contents(Configuration::getLocalConfig('etc', 'iso3166')), true);
|
||||||
|
|
||||||
|
// Check if key exists
|
||||||
|
if(array_key_exists($code, $iso3166))
|
||||||
|
return $iso3166[$code]; // If entry found return the full name
|
||||||
|
else
|
||||||
|
return 'Unknown'; // Else return unknown
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,8 @@ class Users {
|
||||||
'lastdate' => 0,
|
'lastdate' => 0,
|
||||||
'lastunamechange' => 0,
|
'lastunamechange' => 0,
|
||||||
'birthday' => '',
|
'birthday' => '',
|
||||||
'profile_data' => '[]'
|
'country' => 'EU',
|
||||||
|
'profile_data' => ''
|
||||||
];
|
];
|
||||||
|
|
||||||
// Empty rank template
|
// Empty rank template
|
||||||
|
@ -41,7 +42,8 @@ class Users {
|
||||||
'rankname' => 'Non-existent Rank',
|
'rankname' => 'Non-existent Rank',
|
||||||
'multi' => 0,
|
'multi' => 0,
|
||||||
'colour' => '#444',
|
'colour' => '#444',
|
||||||
'description' => 'A hardcoded dummy rank for fallback.'
|
'description' => 'A hardcoded dummy rank for fallback.',
|
||||||
|
'is_premium' => 0
|
||||||
];
|
];
|
||||||
|
|
||||||
// Check if a user is logged in
|
// Check if a user is logged in
|
||||||
|
@ -69,6 +71,16 @@ class Users {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update last online
|
||||||
|
Database::update('users', [
|
||||||
|
[
|
||||||
|
'lastdate' => time()
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id' => [Session::$userId, '=']
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
// Redirect people that need to change their password to the new format
|
// Redirect people that need to change their password to the new format
|
||||||
if(self::getUser(Session::$userId)['password_algo'] == 'legacy' && $_SERVER['PHP_SELF'] != '/authenticate.php' && $_SERVER['PHP_SELF'] != '/imageserve.php')
|
if(self::getUser(Session::$userId)['password_algo'] == 'legacy' && $_SERVER['PHP_SELF'] != '/authenticate.php' && $_SERVER['PHP_SELF'] != '/imageserve.php')
|
||||||
header('Location: /authenticate.php?legacy=true');
|
header('Location: /authenticate.php?legacy=true');
|
||||||
|
@ -235,7 +247,7 @@ class Users {
|
||||||
'lastdate' => 0,
|
'lastdate' => 0,
|
||||||
'lastunamechange' => time(),
|
'lastunamechange' => time(),
|
||||||
'country' => Main::getCountryCode(),
|
'country' => Main::getCountryCode(),
|
||||||
'profile_data' => '[]'
|
'profile_data' => ''
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Get userid of the new user
|
// Get userid of the new user
|
||||||
|
@ -435,7 +447,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($user['rank_main'])
|
if(!in_array(1, json_decode($user['ranks'], true)) || !in_array(0, json_decode($user['ranks'], true)) || $user['rank_main'] > 1)
|
||||||
return [0, 'USER_ALREADY_ACTIVE'];
|
return [0, 'USER_ALREADY_ACTIVE'];
|
||||||
|
|
||||||
// Send activation e-mail
|
// Send activation e-mail
|
||||||
|
@ -453,7 +465,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) > 1 || !in_array(1, json_decode($user['ranks'], true)) || !in_array(0, json_decode($user['ranks'], true)) || $user['rank_main'] > 1)
|
if(count($user) < 2 || (!in_array(1, json_decode($user['ranks'], true)) || !in_array(0, json_decode($user['ranks'], true))) || $user['rank_main'] > 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Generate activation key
|
// Generate activation key
|
||||||
|
@ -642,6 +654,125 @@ class Users {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get user's profile fields
|
||||||
|
public static function getUserProfileData($id) {
|
||||||
|
|
||||||
|
// Get profile fields
|
||||||
|
$profileFields = Database::fetch('profilefields');
|
||||||
|
|
||||||
|
// If there's nothing just return null
|
||||||
|
if(!count($profileFields))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Get the profile data JSON from the specified user's profile
|
||||||
|
$profileData = Database::fetch('users', false, ['id' => [$id, '=']]);
|
||||||
|
|
||||||
|
// Once again if nothing was returned just return null
|
||||||
|
if(count($profileData) < 2 || $profileData['profile_data'] == null || !count(json_decode($profileData['profile_data'], true)))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Decode the profile_data json
|
||||||
|
$profileData = json_decode($profileData['profile_data'], true);
|
||||||
|
|
||||||
|
// Create output array
|
||||||
|
$profile = [];
|
||||||
|
|
||||||
|
// Check if profile fields aren't fake
|
||||||
|
foreach($profileFields as $field) {
|
||||||
|
|
||||||
|
// Completely strip all special characters from the field name
|
||||||
|
$fieldName = Main::cleanString($field['name'], true, true);
|
||||||
|
|
||||||
|
// Check if the user has the current field set otherwise continue
|
||||||
|
if(!array_key_exists($fieldName, $profileData))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Assign field to output with value
|
||||||
|
$profile[$fieldName] = array();
|
||||||
|
$profile[$fieldName]['name'] = $field['name'];
|
||||||
|
$profile[$fieldName]['value'] = $profileData[$fieldName];
|
||||||
|
$profile[$fieldName]['islink'] = $field['islink'];
|
||||||
|
|
||||||
|
// If the field is set to be a link add a value for that as well
|
||||||
|
if($field['islink'])
|
||||||
|
$profile[$fieldName]['link'] = str_replace('{{ VAL }}', $profileData[$fieldName], $field['linkformat']);
|
||||||
|
|
||||||
|
// Check if we have additional options as well
|
||||||
|
if($field['additional'] != null) {
|
||||||
|
|
||||||
|
// Decode the json of the additional stuff
|
||||||
|
$additional = json_decode($field['additional'], true);
|
||||||
|
|
||||||
|
// Go over all additional forms
|
||||||
|
foreach($additional as $subName => $subField) {
|
||||||
|
|
||||||
|
// Check if the user has the current field set otherwise continue
|
||||||
|
if(!array_key_exists($subName, $profileData))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Assign field to output with value
|
||||||
|
$profile[$fieldName][$subName] = $profileData[$subName];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return appropiate profile data
|
||||||
|
return $profile;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if a user is online
|
||||||
|
public static function checkUserOnline($id) {
|
||||||
|
|
||||||
|
// Get user
|
||||||
|
$user = self::getUser($id);
|
||||||
|
|
||||||
|
// Return false if the user doesn't exist because a user that doesn't exist can't be online
|
||||||
|
if(empty($user))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Return true if the user was online in the last 5 minutes
|
||||||
|
return ($user['lastdate'] > (time() - 500));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all online users
|
||||||
|
public static function checkAllOnline() {
|
||||||
|
|
||||||
|
// Assign time - 500 to a variable
|
||||||
|
$time = time() - 500;
|
||||||
|
|
||||||
|
// Get all online users in the past 5 minutes
|
||||||
|
$getAll = Database::fetch('users', true, ['lastdate' => [$time, '>']]);
|
||||||
|
|
||||||
|
// Return all the online users
|
||||||
|
return $getAll;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if user has Tenshi
|
||||||
|
public static function checkUserTenshi($id) {
|
||||||
|
|
||||||
|
// Get user's ranks
|
||||||
|
$ranks = json_decode(self::getUser($id)['ranks'], true);
|
||||||
|
|
||||||
|
// Check premium flag
|
||||||
|
foreach($ranks as $rank) {
|
||||||
|
|
||||||
|
// If premium rank was found return true
|
||||||
|
if(self::getRank($rank)['is_premium'])
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Else return false
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Get user data by id
|
// Get user data by id
|
||||||
public static function getUser($id) {
|
public static function getUser($id) {
|
||||||
|
|
||||||
|
|
|
@ -23,3 +23,4 @@ $sakuraConf['urls']['manage'] = 'manage.flashii.net'; // Moderator panel url
|
||||||
// Errata
|
// Errata
|
||||||
$sakuraConf['etc']['cfhosts'] = ROOT .'_sakura/config/cloudflare.hosts'; // Cloudflare IP subnets file
|
$sakuraConf['etc']['cfhosts'] = ROOT .'_sakura/config/cloudflare.hosts'; // Cloudflare IP subnets file
|
||||||
$sakuraConf['etc']['whoisservers'] = ROOT .'_sakura/config/whois.json'; // JSON with Whois servers
|
$sakuraConf['etc']['whoisservers'] = ROOT .'_sakura/config/whois.json'; // JSON with Whois servers
|
||||||
|
$sakuraConf['etc']['iso3166'] = ROOT .'_sakura/config/iso3166.json'; // JSON with country codes
|
||||||
|
|
250
_sakura/config/iso3166.json
Normal file
250
_sakura/config/iso3166.json
Normal file
|
@ -0,0 +1,250 @@
|
||||||
|
{
|
||||||
|
"_CONTRIB": "List of ISO 3166-1 alpha-2 country codes by Flashwave http://flash.moe",
|
||||||
|
"AD": "Andorra",
|
||||||
|
"AE": "United Arab Emirates",
|
||||||
|
"AF": "Afghanistan",
|
||||||
|
"AG": "Antigua and Barbuda",
|
||||||
|
"AI": "Anguilla",
|
||||||
|
"AL": "Albania",
|
||||||
|
"AM": "Armenia",
|
||||||
|
"AO": "Angola",
|
||||||
|
"AQ": "Antarctica",
|
||||||
|
"AR": "Argentina",
|
||||||
|
"AS": "American Samoa",
|
||||||
|
"AT": "Austria",
|
||||||
|
"AU": "Australia",
|
||||||
|
"AW": "Aruba",
|
||||||
|
"AX": "Åland Islands",
|
||||||
|
"AZ": "Azerbaijan",
|
||||||
|
"BA": "Bosnia and Herzegovina",
|
||||||
|
"BB": "Barbados",
|
||||||
|
"BD": "Bangladesh",
|
||||||
|
"BE": "Belgium",
|
||||||
|
"BF": "Burkina Faso",
|
||||||
|
"BG": "Bulgaria",
|
||||||
|
"BH": "Bahrain",
|
||||||
|
"BI": "Burundi",
|
||||||
|
"BJ": "Benin",
|
||||||
|
"BL": "Saint Barthélemy",
|
||||||
|
"BM": "Bermuda",
|
||||||
|
"BN": "Brunei Darussalam",
|
||||||
|
"BO": "Bolivia, Plurinational State of",
|
||||||
|
"BQ": "Bonaire, Sint Eustatius and Saba",
|
||||||
|
"BR": "Brazil",
|
||||||
|
"BS": "Bahamas",
|
||||||
|
"BT": "Bhutan",
|
||||||
|
"BV": "Bouvet Island",
|
||||||
|
"BW": "Botswana",
|
||||||
|
"BY": "Belarus",
|
||||||
|
"BZ": "Belize",
|
||||||
|
"CC": "Cocos (Keeling) Islands",
|
||||||
|
"CD": "Congo, the Democratic Republic of the",
|
||||||
|
"CF": "Central African Republic",
|
||||||
|
"CG": "Congo",
|
||||||
|
"CH": "Switzerland",
|
||||||
|
"CI": "Côte d'Ivoire",
|
||||||
|
"CK": "Cook Islands",
|
||||||
|
"CL": "Chile",
|
||||||
|
"CM": "Cameroon",
|
||||||
|
"CN": "China",
|
||||||
|
"CO": "Colombia",
|
||||||
|
"CR": "Costa Rica",
|
||||||
|
"CU": "Cuba",
|
||||||
|
"CV": "Cabo Verde",
|
||||||
|
"CW": "Curaçao",
|
||||||
|
"CX": "Christmas Island",
|
||||||
|
"CY": "Cyprus",
|
||||||
|
"CZ": "Czech Republic",
|
||||||
|
"DE": "Germany",
|
||||||
|
"DJ": "Djibouti",
|
||||||
|
"DK": "Denmark",
|
||||||
|
"DM": "Dominica",
|
||||||
|
"DO": "Dominican Republic",
|
||||||
|
"DZ": "Algeria",
|
||||||
|
"EC": "Ecuador",
|
||||||
|
"EE": "Estonia",
|
||||||
|
"EG": "Egypt",
|
||||||
|
"EH": "Western Sahara",
|
||||||
|
"ER": "Eritrea",
|
||||||
|
"ES": "Spain",
|
||||||
|
"ET": "Ethiopia",
|
||||||
|
"FI": "Finland",
|
||||||
|
"FJ": "Fiji",
|
||||||
|
"FK": "Falkland Islands (Malvinas)",
|
||||||
|
"FM": "Micronesia, Federated States of",
|
||||||
|
"FO": "Faroe Islands",
|
||||||
|
"FR": "France",
|
||||||
|
"GA": "Gabon",
|
||||||
|
"GB": "United Kingdom",
|
||||||
|
"GD": "Grenada",
|
||||||
|
"GE": "Georgia",
|
||||||
|
"GF": "French Guiana",
|
||||||
|
"GG": "Guernsey",
|
||||||
|
"GH": "Ghana",
|
||||||
|
"GI": "Gibraltar",
|
||||||
|
"GL": "Greenland",
|
||||||
|
"GM": "Gambia",
|
||||||
|
"GN": "Guinea",
|
||||||
|
"GP": "Guadeloupe",
|
||||||
|
"GQ": "Equatorial Guinea",
|
||||||
|
"GR": "Greece",
|
||||||
|
"GS": "South Georgia and the South Sandwich Islands",
|
||||||
|
"GT": "Guatemala",
|
||||||
|
"GU": "Guam",
|
||||||
|
"GW": "Guinea-Bissau",
|
||||||
|
"GY": "Guyana",
|
||||||
|
"HK": "Hong Kong",
|
||||||
|
"HM": "Heard Island and McDonald Islands",
|
||||||
|
"HN": "Honduras",
|
||||||
|
"HR": "Croatia",
|
||||||
|
"HT": "Haiti",
|
||||||
|
"HU": "Hungary",
|
||||||
|
"ID": "Indonesia",
|
||||||
|
"IE": "Ireland",
|
||||||
|
"IL": "Israel",
|
||||||
|
"IM": "Isle of Man",
|
||||||
|
"IN": "India",
|
||||||
|
"IO": "British Indian Ocean Territory",
|
||||||
|
"IQ": "Iraq",
|
||||||
|
"IR": "Iran, Islamic Republic of",
|
||||||
|
"IS": "Iceland",
|
||||||
|
"IT": "Italy",
|
||||||
|
"JE": "Jersey",
|
||||||
|
"JM": "Jamaica",
|
||||||
|
"JO": "Jordan",
|
||||||
|
"JP": "Japan",
|
||||||
|
"KE": "Kenya",
|
||||||
|
"KG": "Kyrgyzstan",
|
||||||
|
"KH": "Cambodia",
|
||||||
|
"KI": "Kiribati",
|
||||||
|
"KM": "Comoros",
|
||||||
|
"KN": "Saint Kitts and Nevis",
|
||||||
|
"KP": "Korea, Democratic People's Republic of",
|
||||||
|
"KR": "Korea, Republic of",
|
||||||
|
"KW": "Kuwait",
|
||||||
|
"KY": "Cayman Islands",
|
||||||
|
"KZ": "Kazakhstan",
|
||||||
|
"LA": "Lao People's Democratic Republic",
|
||||||
|
"LB": "Lebanon",
|
||||||
|
"LC": "Saint Lucia",
|
||||||
|
"LI": "Liechtenstein",
|
||||||
|
"LK": "Sri Lanka",
|
||||||
|
"LR": "Liberia",
|
||||||
|
"LS": "Lesotho",
|
||||||
|
"LT": "Lithuania",
|
||||||
|
"LU": "Luxembourg",
|
||||||
|
"LV": "Latvia",
|
||||||
|
"LY": "Libya",
|
||||||
|
"MA": "Morocco",
|
||||||
|
"MC": "Monaco",
|
||||||
|
"MD": "Moldova, Republic of",
|
||||||
|
"ME": "Montenegro",
|
||||||
|
"MF": "Saint Martin",
|
||||||
|
"MG": "Madagascar",
|
||||||
|
"MH": "Marshall Islands",
|
||||||
|
"MK": "Macedonia, the former Yugoslav Republic of",
|
||||||
|
"ML": "Mali",
|
||||||
|
"MM": "Myanmar",
|
||||||
|
"MN": "Mongolia",
|
||||||
|
"MO": "Macao",
|
||||||
|
"MP": "Northern Mariana Islands",
|
||||||
|
"MQ": "Martinique",
|
||||||
|
"MR": "Mauritania",
|
||||||
|
"MS": "Montserrat",
|
||||||
|
"MT": "Malta",
|
||||||
|
"MU": "Mauritius",
|
||||||
|
"MV": "Maldives",
|
||||||
|
"MW": "Malawi",
|
||||||
|
"MX": "Mexico",
|
||||||
|
"MY": "Malaysia",
|
||||||
|
"MZ": "Mozambique",
|
||||||
|
"NA": "Namibia",
|
||||||
|
"NC": "New Caledonia",
|
||||||
|
"NE": "Niger",
|
||||||
|
"NF": "Norfolk Island",
|
||||||
|
"NG": "Nigeria",
|
||||||
|
"NI": "Nicaragua",
|
||||||
|
"NL": "The Netherlands",
|
||||||
|
"NO": "Norway",
|
||||||
|
"NP": "Nepal",
|
||||||
|
"NR": "Nauru",
|
||||||
|
"NU": "Niue",
|
||||||
|
"NZ": "New Zealand",
|
||||||
|
"OM": "Oman",
|
||||||
|
"PA": "Panama",
|
||||||
|
"PE": "Peru",
|
||||||
|
"PF": "French Polynesia",
|
||||||
|
"PG": "Papua New Guinea",
|
||||||
|
"PH": "Philippines",
|
||||||
|
"PK": "Pakistan",
|
||||||
|
"PL": "Poland",
|
||||||
|
"PM": "Saint Pierre and Miquelon",
|
||||||
|
"PN": "Pitcairn",
|
||||||
|
"PR": "Puerto Rico",
|
||||||
|
"PS": "Palestine, State of",
|
||||||
|
"PT": "Portugal",
|
||||||
|
"PW": "Palau",
|
||||||
|
"PY": "Paraguay",
|
||||||
|
"QA": "Qatar",
|
||||||
|
"RE": "Réunion",
|
||||||
|
"RO": "Romania",
|
||||||
|
"RS": "Serbia",
|
||||||
|
"RU": "Russian Federation",
|
||||||
|
"RW": "Rwanda",
|
||||||
|
"SA": "Saudi Arabia",
|
||||||
|
"SB": "Solomon Islands",
|
||||||
|
"SC": "Seychelles",
|
||||||
|
"SD": "Sudan",
|
||||||
|
"SE": "Sweden",
|
||||||
|
"SG": "Singapore",
|
||||||
|
"SH": "Saint Helena, Ascension and Tristan da Cunha",
|
||||||
|
"SI": "Slovenia",
|
||||||
|
"SJ": "Svalbard and Jan Mayen",
|
||||||
|
"SK": "Slovakia",
|
||||||
|
"SL": "Sierra Leone",
|
||||||
|
"SM": "San Marino",
|
||||||
|
"SN": "Senegal",
|
||||||
|
"SO": "Somalia",
|
||||||
|
"SR": "Suriname",
|
||||||
|
"SS": "South Sudan",
|
||||||
|
"ST": "Sao Tome and Principe",
|
||||||
|
"SV": "El Salvador",
|
||||||
|
"SX": "Sint Maarten",
|
||||||
|
"SY": "Syrian Arab Republic",
|
||||||
|
"SZ": "Swaziland",
|
||||||
|
"TC": "Turks and Caicos Islands",
|
||||||
|
"TD": "Chad",
|
||||||
|
"TF": "French Southern Territories",
|
||||||
|
"TG": "Togo",
|
||||||
|
"TH": "Thailand",
|
||||||
|
"TK": "Tokelau",
|
||||||
|
"TL": "Timor-Leste",
|
||||||
|
"TM": "Turkmenistan",
|
||||||
|
"TN": "Tunisia",
|
||||||
|
"TO": "Tonga",
|
||||||
|
"TR": "Turkey",
|
||||||
|
"TT": "Trinidad and Tobago",
|
||||||
|
"TV": "Tuvalu",
|
||||||
|
"TW": "Taiwan, Province of China",
|
||||||
|
"TZ": "Tanzania, United Republic of",
|
||||||
|
"UA": "Ukraine",
|
||||||
|
"UG": "Uganda",
|
||||||
|
"UM": "United States Minor Outlying Islands",
|
||||||
|
"US": "United States",
|
||||||
|
"UY": "Uruguay",
|
||||||
|
"UZ": "Uzbekistan",
|
||||||
|
"VA": "Holy See (Vatican City State)",
|
||||||
|
"VC": "Saint Vincent and the Grenadines",
|
||||||
|
"VE": "Venezuela, Bolivarian Republic of",
|
||||||
|
"VG": "Virgin Islands, British",
|
||||||
|
"VI": "Virgin Islands, U.S.",
|
||||||
|
"VN": "Viet Nam",
|
||||||
|
"VU": "Vanuatu",
|
||||||
|
"WF": "Wallis and Futuna",
|
||||||
|
"WS": "Samoa",
|
||||||
|
"YE": "Yemen",
|
||||||
|
"YT": "Mayotte",
|
||||||
|
"ZA": "South Africa",
|
||||||
|
"ZM": "Zambia",
|
||||||
|
"ZW": "Zimbabwe"
|
||||||
|
}
|
|
@ -8,10 +8,10 @@
|
||||||
namespace Sakura;
|
namespace Sakura;
|
||||||
|
|
||||||
// Define Sakura version
|
// Define Sakura version
|
||||||
define('SAKURA_VERSION', '20150426');
|
define('SAKURA_VERSION', '20150427');
|
||||||
define('SAKURA_VLABEL', 'Cyan');
|
define('SAKURA_VLABEL', 'Heliotrope');
|
||||||
define('SAKURA_VTYPE', 'Development');
|
define('SAKURA_VTYPE', 'Development');
|
||||||
define('SAKURA_COLOUR', '#4EC9B0');
|
define('SAKURA_COLOUR', '#DF73FF');
|
||||||
|
|
||||||
// Define Sakura Path
|
// Define Sakura Path
|
||||||
define('ROOT', str_replace(basename(__DIR__), '', dirname(__FILE__)));
|
define('ROOT', str_replace(basename(__DIR__), '', dirname(__FILE__)));
|
||||||
|
|
|
@ -11,11 +11,11 @@
|
||||||
<meta http-equiv="refresh" content="3; URL={{ page.redirect }}" />
|
<meta http-equiv="refresh" content="3; URL={{ page.redirect }}" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<!-- CSS -->
|
<!-- CSS -->
|
||||||
<link rel="stylesheet" type="text/css" href="//{{ sakura.urls.content }}/global.css?s={{ php.time }}" />
|
<link rel="stylesheet" type="text/css" href="//{{ sakura.urls.content }}/global.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="{{ sakura.resources }}/css/yuuno.css?s={{ php.time }}" />
|
<link rel="stylesheet" type="text/css" href="{{ sakura.resources }}/css/yuuno.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" />
|
<link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" />
|
||||||
<!-- JS -->
|
<!-- JS -->
|
||||||
<script type="text/javascript" src="{{ sakura.resources }}/js/yuuno.js?s={{ php.time }}"></script>
|
<script type="text/javascript" src="{{ sakura.resources }}/js/yuuno.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
{% if not user.checklogin and not sakura.lockauth %}
|
{% if not user.checklogin and not sakura.lockauth %}
|
||||||
|
|
||||||
|
@ -91,13 +91,12 @@
|
||||||
var form = document.getElementById(i);
|
var form = document.getElementById(i);
|
||||||
var submit = form.querySelector('[type="submit"]');
|
var submit = form.querySelector('[type="submit"]');
|
||||||
|
|
||||||
// TODO: Make hitting the enter key submit forms
|
|
||||||
//form.setAttribute('onkeypress', '');
|
|
||||||
|
|
||||||
submit.setAttribute('href', 'javascript:void(0);');
|
submit.setAttribute('href', 'javascript:void(0);');
|
||||||
submit.setAttribute('onclick', 'submitPost(\''+ i +'\', true, \''+ forms[i] +'\');');
|
submit.setAttribute('onclick', 'submitPost(\''+ i +'\', true, \''+ forms[i] +'\');');
|
||||||
submit.setAttribute('type', 'button');
|
submit.setAttribute('type', 'button');
|
||||||
|
|
||||||
|
form.setAttribute('onkeydown', 'formEnterCatch(event, \''+ submit.id +'\');');
|
||||||
|
|
||||||
var createInput = document.createElement('input');
|
var createInput = document.createElement('input');
|
||||||
createInput.setAttribute('name', 'ajax');
|
createInput.setAttribute('name', 'ajax');
|
||||||
createInput.setAttribute('value', 'true');
|
createInput.setAttribute('value', 'true');
|
||||||
|
@ -148,7 +147,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="contentwrapper">
|
<div id="contentwrapper">
|
||||||
{% if not user.checklogin %}
|
{% if not user.checklogin %}
|
||||||
<form method="post" action="/authenticate" class="hidden" id="headerLoginForm">
|
<form method="post" action="/authenticate" class="hidden" id="headerLoginForm" onkeydown="formEnterCatch(event, 'headerLoginButton');">
|
||||||
<input type="hidden" name="redirect" value="{{ sakura.currentpage }}" />
|
<input type="hidden" name="redirect" value="{{ sakura.currentpage }}" />
|
||||||
<input type="hidden" name="session" value="{{ php.sessionid }}" />
|
<input type="hidden" name="session" value="{{ php.sessionid }}" />
|
||||||
<input type="hidden" name="time" value="{{ php.time }}" />
|
<input type="hidden" name="time" value="{{ php.time }}" />
|
||||||
|
|
|
@ -26,6 +26,15 @@
|
||||||
<b><a href="/u/{{ stats.newestUser.id }}" class="default">{{ stats.newestUser.username }}</a></b> is the newest user,
|
<b><a href="/u/{{ stats.newestUser.id }}" class="default">{{ stats.newestUser.username }}</a></b> is the newest user,
|
||||||
it has been <b>{{ stats.lastRegDate }}</b> since the last user registered and
|
it has been <b>{{ stats.lastRegDate }}</b> since the last user registered and
|
||||||
there are <b>{{ stats.chatOnline }}</b> in chat right now.
|
there are <b>{{ stats.chatOnline }}</b> in chat right now.
|
||||||
|
<div class="head">Online Users</div>
|
||||||
|
{% if stats.onlineUsers %}
|
||||||
|
All active users in the past 5 minutes:<br />
|
||||||
|
{% for amount,onlineUser in stats.onlineUsers %}
|
||||||
|
<a href="/u/{{ onlineUser.id }}" style="font-weight: bold;" class="default">{{ onlineUser.username }}</a>{% if amount != (stats.onlineUsers|length - 1) %}, {% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
There were no online users in the past 5 minutes.
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="content-left content-column">
|
<div class="content-left content-column">
|
||||||
<div class="head">News <a href="/news.xml" class="fa fa-rss news-rss default"></a></div>
|
<div class="head">News <a href="/news.xml" class="fa fa-rss news-rss default"></a></div>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
There are a few possible reasons for this:
|
There are a few possible reasons for this:
|
||||||
<ul style="padding-left: 40px;">
|
<ul style="padding-left: 40px;">
|
||||||
<li>They changed their username.</li>
|
<li>They changed their username.</li>
|
||||||
<li>They may have been abyss'd.</li>
|
<li>They may have been <a href="/faq#abyss" class="default">abyss'd</a>.</li>
|
||||||
<li>You made a typo.</li>
|
<li>You made a typo.</li>
|
||||||
<li>They never existed.</li>
|
<li>They never existed.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -14,12 +14,38 @@
|
||||||
<div class="content profile">
|
<div class="content profile">
|
||||||
<div class="{% if profile.profpage|length > 1 %}content-right {% endif %}content-column">
|
<div class="{% if profile.profpage|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" />
|
<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.user.usertitle }}</span>
|
<br /><span style="font-size: .8em;">{{ profile.ranktitle }}</span>
|
||||||
<h1 style="color: {{ profile.colour }}; text-shadow: 0 0 7px #888; padding: 0 0 10px;">{{ profile.user.username }}</h1>
|
<h1 style="color: {{ profile.colour }}; text-shadow: 0 0 7px #888; padding: 0 0 2px;">{{ profile.user.username }}</h1>
|
||||||
|
{% if profile.istenshi %}<img src="//{{ sakura.urls.content }}/images/tenshi.png" alt="Tenshi" /> {% endif %}<img src="//{{ sakura.urls.content }}/images/flags/{% if profile.user.country|lower == 'eu' %}europeanunion{% else %}{{ profile.user.country|lower }}{% endif %}.png" alt="{{ profile.user.country }}" /> <span style="font-size: .9em; line-height: 11px;">{{ profile.country }}</span>
|
||||||
<hr class="default" />
|
<hr class="default" />
|
||||||
<b>Joined</b> {{ profile.user.regdate|date("l Y-m-d H:i") }}<br />
|
<b>Joined</b> {{ profile.user.regdate|date("l Y-m-d H:i T") }}<br />
|
||||||
<b>Last Seen on</b> {{ profile.user.lastdate|date("l Y-m-d H:i") }}
|
<b>Last Seen on</b> {{ profile.user.lastdate|date("l Y-m-d H:i T") }}
|
||||||
|
{% if profile.data is not null %}
|
||||||
|
<hr class="default" />
|
||||||
|
<table style="width: 100%;">
|
||||||
|
{% for name,field in profile.data %}
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: left; font-weight: bold;">
|
||||||
|
{{ field.name }}
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
{% if name == 'youtube' %}
|
||||||
|
<a href="https://youtube.com/{% if field.youtubetype == 1 %}channel{% else %}user{% endif %}/{{ field.value }}" class="default">{{ field.value }}</a>
|
||||||
|
{% else %}
|
||||||
|
{% if field.islink %}
|
||||||
|
<a href="{{ field.link }}" class="default">
|
||||||
|
{% endif %}
|
||||||
|
{{ field.value }}
|
||||||
|
{% if field.islink %}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endif %}
|
||||||
<hr class="default" />
|
<hr class="default" />
|
||||||
<b>Account Standing</b>
|
<b>Account Standing</b>
|
||||||
<h2 style="color: green; text-shadow: 0 0 7px #888; margin-top: 0;">Good</h2>
|
<h2 style="color: green; text-shadow: 0 0 7px #888; margin-top: 0;">Good</h2>
|
||||||
|
|
|
@ -277,6 +277,25 @@ function generateForm(formId, formAttr, formData, appendTo) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enter substitute
|
||||||
|
function formEnterCatch(key, id) {
|
||||||
|
|
||||||
|
// 13 == Enter
|
||||||
|
if(key.which == 13) {
|
||||||
|
|
||||||
|
// Submit the form
|
||||||
|
document.getElementById(id).click();
|
||||||
|
|
||||||
|
// Return true if yeah
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return false if not
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Submitting a form using an AJAX POST request
|
// Submitting a form using an AJAX POST request
|
||||||
function submitPost(formId, busyView, msg) {
|
function submitPost(formId, busyView, msg) {
|
||||||
|
|
||||||
|
|
1
content/data/yuuno/js/yuuno.min.js
vendored
1
content/data/yuuno/js/yuuno.min.js
vendored
|
@ -1 +0,0 @@
|
||||||
/* Flashii.net Style Codename "Yuuno" */ function cookieData(e,t,a){switch(e){case"get":return(result=new RegExp("(^|; )"+encodeURIComponent(t)+"=([^;]*)").exec(document.cookie))?result[2]:"";case"set":return void(document.cookie=t+"="+a);default:return}}function mobileMenu(e){var t=document.getElementById("navMenuSite"),a=document.getElementById("navMenuUser"),n=document.getElementById("mobileNavToggle");e?(t.className=t.className+" menu-hid",a.className=a.className+" menu-hid",n.innerHTML="Close Menu",n.setAttribute("onclick","mobileMenu(false);")):(t.className=t.className.replace(" menu-hid",""),a.className=a.className.replace(" menu-hid",""),n.innerHTML="Open Menu",n.setAttribute("onclick","mobileMenu(true);"))}function epochTime(){var e=Date.now();return e/=1e3,Math.floor(e)}function donatePage(e){var t=document.getElementsByClassName("featureBoxDesc");{if(e){var a=document.getElementById(e).children[1];return a.className.search("donateOpened")>0?(a.className=a.className.replace(" donateOpened",""),void(a.className=a.className+" donateClosed")):(a.className=a.className.replace(" donateClosed",""),void(a.className=a.className+" donateOpened"))}for(var n=0;n<t.length;n++)t[n].className=t[n].className+" donateClosed"}}function switch_text(e){var t=document.getElementById("recaptcha_response_field");"audio"==e?t.setAttribute("placeholder","Enter the words you hear"):"image"==e?t.setAttribute("placeholder","Enter the words above"):t.setAttribute("placeholder","undefined rolls undefined and gets undefined")}window.onscroll=function(){var e=document.getElementById("gotop");this.pageYOffset<112?e.getAttribute("class").indexOf("hidden")<0&&e.setAttribute("class",e.getAttribute("class")+" hidden"):this.pageYOffset>112&&e.setAttribute("class",e.getAttribute("class").replace(" hidden",""))};var RecaptchaOptions={theme:"custom",custom_theme_widget:"recaptcha_widget"};
|
|
BIN
content/images/tenshi.png
Normal file
BIN
content/images/tenshi.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 436 B |
|
@ -315,7 +315,7 @@ $renderData['page'] = [
|
||||||
$renderData['auth'] = [
|
$renderData['auth'] = [
|
||||||
'redirect' => (
|
'redirect' => (
|
||||||
isset($_REQUEST['chat']) ?
|
isset($_REQUEST['chat']) ?
|
||||||
Configuration::getLocalConfig('urls', 'chat') :
|
'//'. Configuration::getLocalConfig('urls', 'chat') :
|
||||||
(
|
(
|
||||||
isset($_SERVER['HTTP_REFERER']) ?
|
isset($_SERVER['HTTP_REFERER']) ?
|
||||||
$_SERVER['HTTP_REFERER'] :
|
$_SERVER['HTTP_REFERER'] :
|
||||||
|
|
|
@ -100,7 +100,7 @@ foreach($changelog as $build => $buildData) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get special template file
|
// Get special template file
|
||||||
$tpl = file_get_contents(ROOT .'_sakura/templates/versionInfo.tpl');
|
$tpl = file_get_contents(ROOT .'_sakura/templates/changeLog.tpl');
|
||||||
|
|
||||||
// Parse tags
|
// Parse tags
|
||||||
$tpl = str_replace('{{ version }}', SAKURA_VERSION, $tpl);
|
$tpl = str_replace('{{ version }}', SAKURA_VERSION, $tpl);
|
||||||
|
|
|
@ -19,7 +19,8 @@ $renderData['stats'] = [
|
||||||
'userCount' => ($userCount = count($users = Users::getAllUsers(false))) .' user'. ($userCount == 1 ? '' : 's'),
|
'userCount' => ($userCount = count($users = Users::getAllUsers(false))) .' user'. ($userCount == 1 ? '' : 's'),
|
||||||
'newestUser' => max($users),
|
'newestUser' => max($users),
|
||||||
'lastRegDate' => ($lastRegDate = date_diff(date_create(date('Y-m-d', max($users)['regdate'])), date_create(date('Y-m-d')))->format('%a')) .' day'. ($lastRegDate == 1 ? '' : 's'),
|
'lastRegDate' => ($lastRegDate = date_diff(date_create(date('Y-m-d', max($users)['regdate'])), date_create(date('Y-m-d')))->format('%a')) .' day'. ($lastRegDate == 1 ? '' : 's'),
|
||||||
'chatOnline' => ($chatOnline = 0) .' user'. ($chatOnline == 1 ? '' : 's')
|
'chatOnline' => ($chatOnline = 0) .' user'. ($chatOnline == 1 ? '' : 's'),
|
||||||
|
'onlineUsers' => Users::checkAllOnline()
|
||||||
];
|
];
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
|
|
|
@ -10,7 +10,41 @@ namespace Sakura;
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) .'_sakura/sakura.php';
|
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) .'_sakura/sakura.php';
|
||||||
|
|
||||||
// Catch old profile API and return error
|
// Catch old profile API and return error
|
||||||
if(isset($_REQUEST['data']))
|
if(isset($_REQUEST['data'])) {
|
||||||
die(json_encode(['error' => true]));
|
|
||||||
|
|
||||||
var_dump(@$_REQUEST);
|
header('Content-Type: text/plain; charset=utf-8');
|
||||||
|
header('Access-Control-Allow-Origin: *');
|
||||||
|
|
||||||
|
print json_encode(['error' => true]);
|
||||||
|
|
||||||
|
exit;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get user data
|
||||||
|
if(isset($_GET['u'])) {
|
||||||
|
|
||||||
|
$renderData['profile'] = [
|
||||||
|
'notset' => false,
|
||||||
|
'user' => ($_PROFILE_USER_DATA = Users::getUser($_GET['u'])),
|
||||||
|
'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']),
|
||||||
|
'ranktitle' => ($_PROFILE_USER_DATA['usertitle'] == null ? $_PROFILE_RANK_DATA['title'] : $_PROFILE_USER_DATA['usertitle']),
|
||||||
|
'country' => Main::getCountryName($_PROFILE_USER_DATA['country']),
|
||||||
|
'istenshi' => Users::checkUserTenshi($_PROFILE_USER_DATA['id']),
|
||||||
|
'online' => Users::checkUserOnline($_PROFILE_USER_DATA['id']),
|
||||||
|
'profpage' => Main::mdParse(base64_decode($_PROFILE_USER_DATA['profile_md'])),
|
||||||
|
'data' => Users::getUserProfileData($_PROFILE_USER_DATA['id'])
|
||||||
|
];
|
||||||
|
|
||||||
|
$renderData['page']['title'] = ($renderData['profile']['user']['id'] < 1 ? 'User not found!' : 'Profile of '. $renderData['profile']['user']['username']);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$renderData['profile']['notset'] = true;
|
||||||
|
$renderData['page']['title'] = 'User not found!';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print page contents
|
||||||
|
print Templates::render('main/profile.tpl', $renderData);
|
||||||
|
|
Reference in a new issue