diff --git a/libraries/Controllers/User.php b/libraries/Controllers/User.php index 049f446..6e02f7d 100644 --- a/libraries/Controllers/User.php +++ b/libraries/Controllers/User.php @@ -1,7 +1,7 @@ */ class User { /** - * Display the profile of a user - * + * Display the profile of a user. + * * @param mixed $id The user ID. - * + * * @return bool|string The profile page. */ public static function profile($id = 0) @@ -39,7 +40,7 @@ class User if ($profile->id == 0) { // Fetch from username_history $check = Database::fetch('username_history', false, ['username_old_clean' => [Utils::cleanString(isset($_GET['u']) ? $_GET['u'] : 0, true, true), '=']]); - + // Redirect if so if ($check) { Template::vars([ @@ -85,6 +86,13 @@ class User return Template::render('main/profile'); } + /** + * Display the memberlist. + * + * @param int $rank Optional rank ID. + * + * @return bool|string The memberlist. + */ public static function members($rank = 0) { global $currentUser; @@ -99,7 +107,7 @@ class User 'memberlist' => [ 'ranks' => ($_MEMBERLIST_RANKS = \Sakura\Users::getAllRanks()), 'active' => ($_MEMBERLIST_ACTIVE = (array_key_exists($rank, $_MEMBERLIST_RANKS) ? $rank : 0)), - 'users' => ($_MEMBERLIST_ACTIVE ? \Sakura\Users::getUsersInRank($_MEMBERLIST_ACTIVE) : \Sakura\Users::getAllUsers(false)), + 'users' => ($_MEMBERLIST_ACTIVE ? Rank::construct($_MEMBERLIST_ACTIVE)->users() : \Sakura\Users::getAllUsers(false)), 'membersPerPage' => Config::get('members_per_page'), ] ]); diff --git a/libraries/Rank.php b/libraries/Rank.php index 340e705..6e07964 100644 --- a/libraries/Rank.php +++ b/libraries/Rank.php @@ -1,7 +1,7 @@ */ @@ -20,80 +20,80 @@ class Rank { /** * ID of the rank. - * + * * @var int */ public $id = 0; /** * Name of the rank. - * + * * @var string */ public $name = 'Rank'; /** * Global hierarchy of the rank. - * + * * @var int */ public $hierarchy = 0; /** * Text that should be append to the name to make it address multiple. - * + * * @var string */ public $multiple = ''; /** * The rank's username colour. - * + * * @var string */ public $colour = 'inherit'; /** * Description of the rank. - * + * * @var string */ public $description = ''; /** * User title of the rank. - * + * * @var string */ public $title = ''; /** * Indicates if this rank should be hidden. - * + * * @var bool */ private $hidden = true; /** * Permission container. - * + * * @var Perms */ private $permissions; /** * Instance cache container. - * + * * @var array */ protected static $_rankCache = []; - + /** * Cached constructor. - * + * * @param int $rid ID of the rank. * @param bool $forceRefresh Force a cache refresh. - * + * * @return Rank The requested rank object. */ public static function construct($rid, $forceRefresh = false) @@ -110,7 +110,7 @@ class Rank /** * Constructor. - * + * * @param int $rid ID of the rank that should be constructed. */ private function __construct($rid) @@ -143,9 +143,9 @@ class Rank /** * Get the name of the rank. - * + * * @param bool $multi Should the multiple sense be appended? - * + * * @return string The rank's name. */ public function name($multi = false) @@ -155,7 +155,7 @@ class Rank /** * Indicates if the rank is hidden. - * + * * @return bool Hidden status. */ public function hidden() @@ -165,9 +165,9 @@ class Rank /** * Check permissions. - * + * * @param int $flag Permission flag that should be checked. - * + * * @return bool Success indicator. */ public function permission($flag) @@ -177,7 +177,36 @@ class Rank // Bitwise OR it with the permissions for this forum $perm = $perm | $this->permissions->rank($this->id); - + return $this->permissions->check($flag, $perm); } + + /** + * Returns all users that are part of this rank. + * + * @param bool $justIds Makes this function only return the user ids when set to a positive value. + * + * @return array Either just the user IDs of the users or with objects. + */ + public function users($justIds = false) + { + // Fetch all users part of this rank + $userIds = array_column(Database::fetch('user_ranks', true, ['rank_id' => [$this->id, '=']]), 'user_id'); + + // Just return that if we were asked for just the ids + if ($justIds) { + return $userIds; + } + + // Create the storage array + $users = []; + + // Create User objects and store + foreach ($userIds as $id) { + $users[$id] = User::construct($id); + } + + // Return the array + return $users; + } } diff --git a/libraries/Users.php b/libraries/Users.php index 827765d..ebed89f 100644 --- a/libraries/Users.php +++ b/libraries/Users.php @@ -1,7 +1,7 @@ */ @@ -19,10 +19,10 @@ class Users { /** * Check if a user is logged in - * + * * @param int $uid The user ID. * @param string $sid The session ID. - * + * * @return array|bool Either false or the ID and session in an array. */ public static function checkLogin($uid = null, $sid = null) @@ -103,12 +103,12 @@ class Users /** * Log in to an account. - * + * * @param string $username The username. * @param string $password The password. * @param bool $remember Stay logged in "forever"? * @param bool $cookies Set cookies? - * + * * @return array Return the status. */ public static function login($username, $password, $remember = false, $cookies = true) @@ -191,7 +191,7 @@ class Users /** * Logout - * + * * @return bool Was the logout successful? */ public static function logout() @@ -226,7 +226,7 @@ class Users /** * Register a new account. - * + * * @param string $username The username. * @param string $password The password. * @param string $confirmpass The password, again. @@ -234,7 +234,7 @@ class Users * @param bool $tos Agreeing to the ToS. * @param string $captcha Captcha. * @param string $regkey Registration key (unused). - * + * * @return array Status. */ public static function register($username, $password, $confirmpass, $email, $tos, $captcha = null, $regkey = null) @@ -320,10 +320,10 @@ class Users /** * Send password forgot e-mail - * + * * @param string $username The username. * @param string $email The e-mail. - * + * * @return array The status. */ public static function sendPasswordForgot($username, $email) @@ -382,12 +382,12 @@ class Users /** * Reset a password. - * + * * @param string $verk The e-mail verification key. * @param int $uid The user id. * @param string $newpass New pass. * @param string $verpass Again. - * + * * @return array Status. */ public static function resetPassword($verk, $uid, $newpass, $verpass) @@ -439,10 +439,10 @@ class Users /** * Resend activation e-mail. - * + * * @param string $username Username. * @param string $email E-mail. - * + * * @return array Status */ public static function resendActivationMail($username, $email) @@ -483,10 +483,10 @@ class Users /** * Send activation e-mail. - * + * * @param mixed $uid User ID. * @param mixed $customKey Key. - * + * * @return bool Always true. */ public static function sendActivationMail($uid, $customKey = null) @@ -535,11 +535,11 @@ class Users /** * Activate a user. - * + * * @param int $uid The ID. * @param bool $requireKey Require a key. * @param string $key The key. - * + * * @return array Status. */ public static function activateUser($uid, $requireKey = false, $key = null) @@ -567,7 +567,7 @@ class Users return [0, 'INVALID_CODE']; } } - + // Add normal user, remove deactivated and set normal as default $user->addRanks([2]); $user->removeRanks([1]); @@ -579,10 +579,10 @@ class Users /** * Check if a user exists. - * + * * @param mixed $user The Username or ID. * @param bool $id Use id instead. - * + * * @return mixed Returns the ID if it exists, false otherwise. */ public static function userExists($user, $id = true) @@ -599,7 +599,7 @@ class Users /** * Get all available profile fields. - * + * * @return array|null The fields. */ public static function getProfileFields() @@ -628,7 +628,7 @@ class Users /** * Get all available option fields. - * + * * @return array|null The fields. */ public static function getOptionFields() @@ -661,7 +661,7 @@ class Users /** * Get all online users. - * + * * @return array Array containing User instances. */ public static function checkAllOnline() @@ -684,10 +684,10 @@ class Users /** * Add premium time to a user. - * + * * @param int $id The user ID. * @param int $seconds The amount of extra seconds. - * + * * @return array|double|int The new expiry date. */ public static function addUserPremium($id, $seconds) @@ -725,7 +725,7 @@ class Users /** * Process premium meta data. - * + * * @param int $id The user ID. */ public static function updatePremiumMeta($id) @@ -762,9 +762,9 @@ class Users /** * Get all users that registered from a certain IP. - * - * @param string $ip The IP. - * + * + * @param string $ip The IP. + * * @return array The users. */ public static function getUsersByIP($ip) @@ -782,43 +782,12 @@ class Users return $users; } - /** - * Get users from a rank. - * - * @param int $rankId The rank ID. - * @param mixed $users Array with users. - * @param mixed $excludeAbyss Unused. - * - * @return array Users. - */ - public static function getUsersInRank($rankId, $users = null, $excludeAbyss = true) - { - // Get all users (or use the supplied user list to keep server load down) - if (!$users) { - $users = self::getAllUsers(); - } - - // Make output array - $rank = []; - - // Go over all users and check if they have the rank id - foreach ($users as $user) { - // If so store the user's row in the array - if ($user->hasRanks([$rankId], $user->id)) { - $rank[] = $user; - } - } - - // Then return the array with the user rows - return $rank; - } - /** * Get all users. - * + * * @param mixed $includeInactive include deactivated users. * @param mixed $includeRestricted include restricted users. - * + * * @return array The users. */ public static function getAllUsers($includeInactive = true, $includeRestricted = false) @@ -852,7 +821,7 @@ class Users /** * Get all ranks. - * + * * @return array All ranks. */ public static function getAllRanks() @@ -874,12 +843,12 @@ class Users /** * Get a user's notifications. - * + * * @param int $uid The user id. * @param int $timediff The maximum difference in time. * @param bool $excludeRead Exclude notifications that were already read. * @param bool $markRead Automatically mark as read. - * + * * @return array The notifications. */ public static function getNotifications($uid = null, $timediff = 0, $excludeRead = true, $markRead = false) @@ -919,8 +888,8 @@ class Users /** * Mark a notification as read - * - * @param mixed $id The notification's ID. + * + * @param mixed $id The notification's ID. * @param mixed $mode Read or unread. */ public static function markNotificationRead($id, $mode = true) @@ -938,7 +907,7 @@ class Users /** * Create a new notification. - * + * * @param int $user The user id. * @param string $title The notification title. * @param string $text The rest of the text. @@ -968,7 +937,7 @@ class Users /** * Get the newest member's ID. - * + * * @return int The user ID. */ public static function getNewestUserId() diff --git a/sakura.php b/sakura.php index 07d46b5..2a8be6d 100644 --- a/sakura.php +++ b/sakura.php @@ -8,7 +8,7 @@ namespace Sakura; // Define Sakura version -define('SAKURA_VERSION', '20160204'); +define('SAKURA_VERSION', '20160205'); define('SAKURA_VLABEL', 'Amethyst'); define('SAKURA_COLOUR', '#9966CC'); @@ -26,8 +26,8 @@ set_time_limit(0); mb_internal_encoding('utf-8'); // Stop the execution if the PHP Version is older than 5.4.0 -if (version_compare(phpversion(), '5.4.0', '<')) { - die('Sakura requires at least PHP 5.4.0, please upgrade to a newer PHP version.'); +if (version_compare(phpversion(), '5.5.0', '<')) { + die('Sakura requires at least PHP 5.5.0, please upgrade to a newer PHP version.'); } // Include third-party libraries