Gazelle/classes/users.class.php

624 lines
18 KiB
PHP
Raw Normal View History

2012-10-11 08:00:15 +00:00
<?
class Users {
/**
* Get $Classes (list of classes keyed by ID) and $ClassLevels
* (list of classes keyed by level)
* @return array ($Classes, $ClassLevels)
*/
public static function get_classes() {
2012-10-16 08:00:18 +00:00
global $Cache, $DB, $Debug;
2012-10-11 08:00:15 +00:00
// Get permissions
list($Classes, $ClassLevels) = $Cache->get_value('classes');
if (!$Classes || !$ClassLevels) {
2013-05-28 08:01:02 +00:00
$DB->query('
SELECT ID, Name, Level, Secondary
FROM permissions
ORDER BY Level');
2012-10-11 08:00:15 +00:00
$Classes = $DB->to_array('ID');
$ClassLevels = $DB->to_array('Level');
$Cache->cache_value('classes', array($Classes, $ClassLevels), 0);
}
$Debug->set_flag('Loaded permissions');
2013-05-16 16:15:57 +00:00
2012-10-11 08:00:15 +00:00
return array($Classes, $ClassLevels);
}
/**
* Get user info, is used for the current user and usernames all over the site.
*
* @param $UserID int The UserID to get info for
* @return array with the following keys:
* int ID
* string Username
* int PermissionID
2013-05-27 08:00:58 +00:00
* array Paranoia - $Paranoia array sent to paranoia.class
2012-10-11 08:00:15 +00:00
* boolean Artist
* boolean Donor
* string Warned - When their warning expires in international time format
* string Avatar - URL
* boolean Enabled
* string Title
* string CatchupTime - When they last caught up on forums
* boolean Visible - If false, they don't show up on peer lists
* array ExtraClasses - Secondary classes.
* int EffectiveClass - the highest level of their main and secondary classes
*/
public static function user_info($UserID) {
global $DB, $Cache, $Classes, $SSL;
$UserInfo = $Cache->get_value('user_info_'.$UserID);
// the !isset($UserInfo['Paranoia']) can be removed after a transition period
if (empty($UserInfo) || empty($UserInfo['ID']) || !isset($UserInfo['Paranoia']) || empty($UserInfo['Class'])) {
$OldQueryID = $DB->get_query_id();
2013-05-16 16:15:57 +00:00
$DB->query("
SELECT
m.ID,
m.Username,
m.PermissionID,
m.Paranoia,
i.Artist,
i.Donor,
i.Warned,
i.Avatar,
m.Enabled,
m.Title,
i.CatchupTime,
m.Visible,
GROUP_CONCAT(ul.PermissionID SEPARATOR ',') AS Levels
2012-10-11 08:00:15 +00:00
FROM users_main AS m
2013-05-16 16:15:57 +00:00
INNER JOIN users_info AS i ON i.UserID=m.ID
LEFT JOIN users_levels AS ul ON ul.UserID = m.ID
2012-10-11 08:00:15 +00:00
WHERE m.ID='$UserID'
GROUP BY m.ID");
if ($DB->record_count() == 0) { // Deleted user, maybe?
$UserInfo = array('ID'=>'','Username'=>'','PermissionID'=>0,'Artist'=>false,'Donor'=>false,'Warned'=>'0000-00-00 00:00:00','Avatar'=>'','Enabled'=>0,'Title'=>'', 'CatchupTime'=>0, 'Visible'=>'1');
2013-05-16 16:15:57 +00:00
2012-10-11 08:00:15 +00:00
} else {
$UserInfo = $DB->next_record(MYSQLI_ASSOC, array('Paranoia', 'Title'));
$UserInfo['CatchupTime'] = strtotime($UserInfo['CatchupTime']);
$UserInfo['Paranoia'] = unserialize($UserInfo['Paranoia']);
if ($UserInfo['Paranoia'] === false) {
$UserInfo['Paranoia'] = array();
}
}
$UserInfo['Class'] = $Classes[$UserInfo['PermissionID']]['Level'];
if (!empty($UserInfo['Levels'])) {
$UserInfo['ExtraClasses'] = array_fill_keys(explode(',', $UserInfo['Levels']), 1);
} else {
$UserInfo['ExtraClasses'] = array();
}
unset($UserInfo['Levels']);
$EffectiveClass = $Classes[$UserInfo['PermissionID']]['Level'];
foreach ($UserInfo['ExtraClasses'] as $Class => $Val) {
$EffectiveClass = max($EffectiveClass, $Classes[$Class]['Level']);
}
$UserInfo['EffectiveClass'] = $EffectiveClass;
$Cache->cache_value('user_info_'.$UserID, $UserInfo, 2592000);
$DB->set_query_id($OldQueryID);
}
if (strtotime($UserInfo['Warned']) < time()) {
$UserInfo['Warned'] = '0000-00-00 00:00:00';
$Cache->cache_value('user_info_'.$UserID, $UserInfo, 2592000);
}
return $UserInfo;
}
/**
* Gets the heavy user info
* Only used for current user
*
* @param $UserID The userid to get the information for
* @return fetched heavy info.
* Just read the goddamn code, I don't have time to comment this shit.
*/
public static function user_heavy_info($UserID) {
global $DB, $Cache;
$HeavyInfo = $Cache->get_value('user_info_heavy_'.$UserID);
if (empty($HeavyInfo)) {
2013-05-16 16:15:57 +00:00
$DB->query("
SELECT
m.Invites,
m.torrent_pass,
m.IP,
m.CustomPermissions,
m.can_leech AS CanLeech,
i.AuthKey,
i.RatioWatchEnds,
i.RatioWatchDownload,
i.StyleID,
i.StyleURL,
i.DisableInvites,
i.DisablePosting,
i.DisableUpload,
i.DisableWiki,
i.DisableAvatar,
i.DisablePM,
i.DisableRequests,
i.DisableForums,
i.DisableTagging,
i.SiteOptions,
i.DownloadAlt,
i.LastReadNews,
i.LastReadBlog,
i.RestrictedForums,
i.PermittedForums,
m.FLTokens,
m.PermissionID
2012-10-11 08:00:15 +00:00
FROM users_main AS m
2013-05-16 16:15:57 +00:00
INNER JOIN users_info AS i ON i.UserID=m.ID
2012-10-11 08:00:15 +00:00
WHERE m.ID='$UserID'");
$HeavyInfo = $DB->next_record(MYSQLI_ASSOC, array('CustomPermissions', 'SiteOptions'));
if (!empty($HeavyInfo['CustomPermissions'])) {
$HeavyInfo['CustomPermissions'] = unserialize($HeavyInfo['CustomPermissions']);
} else {
$HeavyInfo['CustomPermissions'] = array();
}
if (!empty($HeavyInfo['RestrictedForums'])) {
$RestrictedForums = array_map('trim', explode(',', $HeavyInfo['RestrictedForums']));
} else {
$RestrictedForums = array();
}
unset($HeavyInfo['RestrictedForums']);
if (!empty($HeavyInfo['PermittedForums'])) {
$PermittedForums = array_map('trim', explode(',', $HeavyInfo['PermittedForums']));
} else {
$PermittedForums = array();
}
unset($HeavyInfo['PermittedForums']);
2013-06-06 08:01:03 +00:00
$DB->query("
SELECT PermissionID
FROM users_levels
WHERE UserID = $UserID");
2012-10-11 08:00:15 +00:00
$PermIDs = $DB->collect('PermissionID');
foreach ($PermIDs AS $PermID) {
$Perms = Permissions::get_permissions($PermID);
if (!empty($Perms['PermittedForums'])) {
2013-06-18 08:00:48 +00:00
$PermittedForums = array_merge($PermittedForums, array_map('trim', explode(',', $Perms['PermittedForums'])));
2012-10-11 08:00:15 +00:00
}
}
$Perms = Permissions::get_permissions($HeavyInfo['PermissionID']);
unset($HeavyInfo['PermissionID']);
if (!empty($Perms['PermittedForums'])) {
2013-06-18 08:00:48 +00:00
$PermittedForums = array_merge($PermittedForums, array_map('trim', explode(',', $Perms['PermittedForums'])));
2012-10-11 08:00:15 +00:00
}
if (!empty($PermittedForums) || !empty($RestrictedForums)) {
$HeavyInfo['CustomForums'] = array();
foreach ($RestrictedForums as $ForumID) {
$HeavyInfo['CustomForums'][$ForumID] = 0;
}
foreach ($PermittedForums as $ForumID) {
$HeavyInfo['CustomForums'][$ForumID] = 1;
}
} else {
$HeavyInfo['CustomForums'] = null;
}
2013-01-24 08:00:24 +00:00
if (isset($HeavyInfo['CustomForums'][''])) {
unset($HeavyInfo['CustomForums']['']);
}
2012-10-11 08:00:15 +00:00
$HeavyInfo['SiteOptions'] = unserialize($HeavyInfo['SiteOptions']);
if (!empty($HeavyInfo['SiteOptions'])) {
$HeavyInfo = array_merge($HeavyInfo, $HeavyInfo['SiteOptions']);
}
unset($HeavyInfo['SiteOptions']);
$Cache->cache_value('user_info_heavy_'.$UserID, $HeavyInfo, 0);
}
return $HeavyInfo;
}
/**
* Updates the site options in the database
*
* @param int $UserID the UserID to set the options for
* @param array $NewOptions the new options to set
* @return false if $NewOptions is empty, true otherwise
*/
public static function update_site_options($UserID, $NewOptions) {
if (!is_number($UserID)) {
error(0);
}
if (empty($NewOptions)) {
return false;
}
global $DB, $Cache, $LoggedUser;
// Get SiteOptions
2013-05-28 08:01:02 +00:00
$DB->query("
SELECT SiteOptions
FROM users_info
WHERE UserID = $UserID");
list($SiteOptions) = $DB->next_record(MYSQLI_NUM, false);
2012-10-11 08:00:15 +00:00
$SiteOptions = unserialize($SiteOptions);
// Get HeavyInfo
$HeavyInfo = Users::user_heavy_info($UserID);
// Insert new/replace old options
$SiteOptions = array_merge($SiteOptions, $NewOptions);
$HeavyInfo = array_merge($HeavyInfo, $NewOptions);
// Update DB
2013-05-28 08:01:02 +00:00
$DB->query("
UPDATE users_info
SET SiteOptions = '".db_string(serialize($SiteOptions))."'
WHERE UserID = $UserID");
2012-10-11 08:00:15 +00:00
// Update cache
$Cache->cache_value('user_info_heavy_'.$UserID, $HeavyInfo, 0);
// Update $LoggedUser if the options are changed for the current
if ($LoggedUser['ID'] == $UserID) {
$LoggedUser = array_merge($LoggedUser, $NewOptions);
$LoggedUser['ID'] = $UserID; // We don't want to allow userid switching
}
return true;
}
2012-11-16 08:00:21 +00:00
/**
* Generates a check list of release types, ordered by the user or default
* @global array $SiteOptions
* @param boolean $Default Returns the default list if true
*/
2013-05-28 08:01:02 +00:00
public static function release_order ($Default = false) {
2012-11-16 08:00:21 +00:00
global $SiteOptions, $ReleaseTypes;
$RT = $ReleaseTypes + array(
1024 => 'Guest Appearance',
1023 => 'Remixed By',
1022 => 'Composition',
1021 => 'Produced By');
if ($Default || empty($SiteOptions['SortHide'])) {
$Sort =& $RT;
$Defaults = !empty($SiteOptions['HideTypes']);
} else {
$Sort =& $SiteOptions['SortHide'];
}
foreach ($Sort as $Key => $Val) {
if (isset($Defaults)) {
2013-05-28 08:01:02 +00:00
$Checked = ($Defaults && isset($SiteOptions['HideTypes'][$Key]) ? ' checked="checked"' : '');
2012-11-16 08:00:21 +00:00
} else {
2013-05-28 08:01:02 +00:00
$Checked = ($Val ? ' checked="checked"' : '');
$Val = (isset($RT[$Key]) ? $RT[$Key] : 'Error');
2012-11-16 08:00:21 +00:00
}
$ID = $Key . '_' . (int) !!$Checked;
2013-06-03 08:00:52 +00:00
// The HTML is indented this far for proper indentation in the generated HTML
// on user.php?action=edit
2012-11-16 08:00:21 +00:00
?>
2013-06-03 08:00:52 +00:00
<li class="sortable_item">
<label><input type="checkbox"<?=$Checked?> id="<?=$ID?>" /> <?=$Val?></label>
</li>
2012-11-16 08:00:21 +00:00
<?
}
}
/**
* Returns the default order for the sort list in a JS-friendly string
* @return string
*/
2013-05-28 08:01:02 +00:00
public static function release_order_default_js () {
2012-11-16 08:00:21 +00:00
ob_start();
self::release_order(true);
$HTML = ob_get_contents();
ob_end_clean();
return json_encode($HTML);
}
2012-10-11 08:00:15 +00:00
/**
* Generate a random string
*
* @param Length
* @return random alphanumeric string
*/
public static function make_secret($Length = 32) {
$Secret = '';
2013-05-28 08:01:02 +00:00
$Chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
$CharLen = strlen($Chars) - 1;
2012-10-11 08:00:15 +00:00
for ($i = 0; $i < $Length; ++$i) {
$Secret .= $Chars[mt_rand(0, $CharLen)];
}
return $Secret;
}
/**
* Create a password hash. This method is deprecated and
* should not be used to create new passwords
*
* @param $Str password
* @param $Secret salt
* @return password hash
*/
2013-05-28 08:01:02 +00:00
public static function make_hash($Str, $Secret) {
2012-10-11 08:00:15 +00:00
return sha1(md5($Secret).$Str.sha1($Secret).SITE_SALT);
}
/**
* Verify a password against a password hash
*
* @param $Password password
* @param $Hash password hash
* @param $Secret salt - Only used if the hash was created
2013-04-18 08:00:54 +00:00
* with the deprecated Users::make_hash() method
2012-10-11 08:00:15 +00:00
* @return true on correct password
*/
2013-05-28 08:01:02 +00:00
public static function check_password($Password, $Hash, $Secret = '') {
2012-10-11 08:00:15 +00:00
if (!$Password || !$Hash) {
return false;
}
if (Users::is_crypt_hash($Hash)) {
return crypt($Password, $Hash) == $Hash;
} elseif ($Secret) {
return Users::make_hash($Password, $Secret) == $Hash;
}
return false;
}
/**
* Test if a given hash is a crypt hash
*
* @param $Hash password hash
* @return true if hash is a crypt hash
*/
public static function is_crypt_hash($Hash) {
return preg_match('/\$\d[axy]?\$/', substr($Hash, 0, 4));
}
/**
* Create salted crypt hash for a given string with
* settings specified in CRYPT_HASH_PREFIX
*
* @param $Str string to hash
* @return salted crypt hash
*/
public static function make_crypt_hash($Str) {
$Salt = CRYPT_HASH_PREFIX.Users::gen_crypt_salt().'$';
return crypt($Str, $Salt);
}
/**
* Create salt string for eksblowfish hashing. If /dev/urandom cannot be read,
* fall back to an unsecure method based on mt_rand(). The last character needs
* a special case as it must be either '.', 'O', 'e', or 'u'.
*
* @return salt suitable for eksblowfish hashing
*/
public static function gen_crypt_salt() {
$Salt = '';
$Chars = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
$Numchars = strlen($Chars) - 1;
if ($Handle = @fopen('/dev/urandom', 'r')) {
$Bytes = fread($Handle, 22);
2013-04-30 18:18:07 +00:00
for ($i = 0; $i < 21; $i++) {
2012-10-11 08:00:15 +00:00
$Salt .= $Chars[ord($Bytes[$i]) & $Numchars];
}
$Salt[$i] = $Chars[(ord($Bytes[$i]) & 3) << 4];
} else {
2013-04-30 18:18:07 +00:00
for ($i = 0; $i < 21; $i++) {
2012-10-11 08:00:15 +00:00
$Salt .= $Chars[mt_rand(0, $Numchars)];
}
$Salt[$i] = $Chars[mt_rand(0, 3) << 4];
}
return $Salt;
}
/**
* Returns a username string for display
*
* @param int $UserID
* @param boolean $Badges whether or not badges (donor, warned, enabled) should be shown
* @param boolean $IsWarned -- TODO: Why the fuck do we need this?
* @param boolean $IsEnabled -- TODO: Why the fuck do we need this?
* @param boolean $Class whether or not to show the class
* @param boolean $Title whether or not to show the title
* @return HTML formatted username
*/
public static function format_username($UserID, $Badges = false, $IsWarned = true, $IsEnabled = true, $Class = false, $Title = false) {
2013-01-11 08:00:38 +00:00
global $Classes, $LoggedUser;
2012-10-11 08:00:15 +00:00
// This array is a hack that should be made less retarded, but whatevs
// PermID => ShortForm
$SecondaryClasses = array(
);
if ($UserID == 0) {
return 'System';
}
$UserInfo = Users::user_info($UserID);
if ($UserInfo['Username'] == '') {
return "Unknown [$UserID]";
}
$Str = '';
if ($Title) {
$Str .= '<strong><a href="user.php?id='.$UserID.'">'.$UserInfo['Username'].'</a></strong>';
} else {
$Str .= '<a href="user.php?id='.$UserID.'">'.$UserInfo['Username'].'</a>';
}
if ($Badges) {
$Str .= ($UserInfo['Donor'] == 1) ? '<a href="donate.php"><img src="'.STATIC_SERVER.'common/symbols/donor.png" alt="Donor" title="Donor" /></a>' : '';
2013-04-18 08:00:54 +00:00
}
2013-01-11 08:00:38 +00:00
2013-05-28 08:01:02 +00:00
$Str .= (($IsWarned && $UserInfo['Warned'] != '0000-00-00 00:00:00') ? '<a href="wiki.php?action=article&amp;id=218"'
2013-02-22 08:00:24 +00:00
. '><img src="'.STATIC_SERVER.'common/symbols/warned.png" alt="Warned" title="Warned'
2013-03-06 08:00:23 +00:00
. ($LoggedUser['ID'] === $UserID ? ' - Expires ' . date('Y-m-d H:i', strtotime($UserInfo['Warned'])) : '')
2013-05-28 08:01:02 +00:00
. '" /></a>' : '');
$Str .= (($IsEnabled && $UserInfo['Enabled'] == 2) ? '<a href="rules.php"><img src="'.STATIC_SERVER.'common/symbols/disabled.png" alt="Banned" title="Be good, and you won\'t end up like this user" /></a>' : '');
2012-10-11 08:00:15 +00:00
if ($Badges) {
$ClassesDisplay = array();
2013-04-07 08:00:41 +00:00
foreach ($SecondaryClasses as $PermID => $PermHTML) {
2012-10-11 08:00:15 +00:00
if ($UserInfo['ExtraClasses'][$PermID]) {
$ClassesDisplay[] = '<span class="secondary_class" title="'.$Classes[$PermID]['Name'].'">'.$PermHTML.'</span>';
}
}
if (!empty($ClassesDisplay)) {
$Str .= '&nbsp;'.implode('&nbsp;', $ClassesDisplay);
}
}
if ($Class) {
if ($Title) {
$Str .= ' <strong>('.Users::make_class_string($UserInfo['PermissionID']).')</strong>';
} else {
$Str .= ' ('.Users::make_class_string($UserInfo['PermissionID']).')';
}
}
if ($Title) {
// Image proxy CTs
if (check_perms('site_proxy_images') && !empty($UserInfo['Title'])) {
$UserInfo['Title'] = preg_replace_callback('~src=("?)(http.+?)(["\s>])~',
function($Matches) {
2013-04-30 18:18:07 +00:00
return 'src=' . $Matches[1] . ImageTools::process($Matches[2]) . $Matches[3];
2012-10-11 08:00:15 +00:00
},
$UserInfo['Title']);
}
if ($UserInfo['Title']) {
$Str .= ' <span class="user_title">('.$UserInfo['Title'].')</span>';
}
}
return $Str;
}
/**
* Given a class ID, return its name.
*
* @param int $ClassID
* @return string name
*/
public static function make_class_string($ClassID) {
global $Classes;
return $Classes[$ClassID]['Name'];
}
2012-10-27 08:00:09 +00:00
/**
2013-02-25 21:16:55 +00:00
* Returns an array with User Bookmark data: group ids, collage data, torrent data
2012-10-27 08:00:09 +00:00
* @global CACHE $Cache
* @global DB_MYSQL $DB
* @param string|int $UserID
2013-02-25 21:16:55 +00:00
* @return array Group IDs, Bookmark Data, Torrent List
2012-10-27 08:00:09 +00:00
*/
2013-02-25 21:16:55 +00:00
public static function get_bookmarks ($UserID)
2012-10-27 08:00:09 +00:00
{
global $Cache, $DB;
$UserID = (int) $UserID;
2013-02-25 21:16:55 +00:00
if (($Data = $Cache->get_value('bookmarks_group_ids_' . $UserID))) {
list($GroupIDs, $BookmarkData) = $Data;
2012-10-27 08:00:09 +00:00
} else {
2013-05-28 08:01:02 +00:00
$DB->query("
SELECT GroupID, Sort, `Time`
FROM bookmarks_torrents
WHERE UserID=$UserID
ORDER BY Sort, `Time` ASC");
2012-10-27 08:00:09 +00:00
$GroupIDs = $DB->collect('GroupID');
2013-02-25 21:16:55 +00:00
$BookmarkData = $DB->to_array('GroupID', MYSQLI_ASSOC);
$Cache->cache_value('bookmarks_group_ids_' . $UserID,
array($GroupIDs, $BookmarkData), 3600);
2012-10-27 08:00:09 +00:00
}
2013-02-25 21:16:55 +00:00
$TorrentList = Torrents::get_groups($GroupIDs);
2013-05-28 08:01:02 +00:00
$TorrentList = (isset($TorrentList['matches']) ? $TorrentList['matches'] : array());
2013-02-25 21:16:55 +00:00
return array($GroupIDs, $BookmarkData, $TorrentList);
2012-10-27 08:00:09 +00:00
}
2012-11-16 08:00:21 +00:00
2012-11-01 08:00:21 +00:00
/**
2013-04-19 08:00:55 +00:00
* Generate HTML for a user's avatar or just return the avatar URL
2012-11-01 08:00:21 +00:00
* @param unknown $Avatar
* @param unknown $Username
* @param unknown $Setting
* @param number $Size
* @param string $ReturnHTML
* @return string
*/
public static function show_avatar($Avatar, $Username, $Setting, $Size=150, $ReturnHTML = True) {
global $LoggedUser;
2013-05-01 08:00:16 +00:00
$Avatar = ImageTools::process($Avatar);
2013-04-19 08:00:55 +00:00
// case 1 is avatars disabled
switch ($Setting) {
2012-11-01 08:00:21 +00:00
case 0:
2013-04-07 08:00:41 +00:00
if (!empty($Avatar)) {
2013-05-28 08:01:02 +00:00
$ToReturn = ($ReturnHTML ? "<img src=\"$Avatar\" width=\"$Size\" style=\"max-height: 400px;\" alt=\"$Username avatar\" />" : $Avatar);
2013-04-07 08:00:41 +00:00
} else {
2013-04-19 08:00:55 +00:00
$URL = STATIC_SERVER.'common/avatars/default.png';
2013-05-28 08:01:02 +00:00
$ToReturn = ($ReturnHTML ? "<img src=\"$URL\" width=\"$Size\" style=\"max-height: 400px;\" alt=\"Default avatar\" />" : $URL);
2012-11-01 08:00:21 +00:00
}
break;
case 2:
$ShowAvatar = True;
case 3:
2013-04-19 08:00:55 +00:00
switch ($LoggedUser['Identicons']) {
2012-11-01 08:00:21 +00:00
case 0:
2013-04-19 08:00:55 +00:00
$Type = 'identicon';
2012-11-01 08:00:21 +00:00
break;
case 1:
2013-04-19 08:00:55 +00:00
$Type = 'monsterid';
2012-11-01 08:00:21 +00:00
break;
case 2:
2013-04-19 08:00:55 +00:00
$Type = 'wavatar';
2012-11-01 08:00:21 +00:00
break;
case 3:
2013-04-19 08:00:55 +00:00
$Type = 'retro';
2012-11-01 08:00:21 +00:00
break;
case 4:
2013-04-19 08:00:55 +00:00
$Type = '1';
2012-11-01 08:00:21 +00:00
$Robot = True;
break;
case 5:
2013-04-19 08:00:55 +00:00
$Type = '2';
2012-11-01 08:00:21 +00:00
$Robot = True;
break;
case 6:
2013-04-19 08:00:55 +00:00
$Type = '3';
2012-11-01 08:00:21 +00:00
$Robot = True;
break;
default:
2013-04-19 08:00:55 +00:00
$Type = 'identicon';
2012-11-01 08:00:21 +00:00
}
2013-04-19 08:00:55 +00:00
$Rating = 'pg';
2013-04-07 08:00:41 +00:00
if (!$Robot) {
2013-04-19 08:00:55 +00:00
$URL = 'https://secure.gravatar.com/avatar/'.md5(strtolower(trim($Username)))."?s=$Size&amp;d=$Type&amp;r=$Rating";
2013-04-07 08:00:41 +00:00
} else {
2013-05-28 08:01:02 +00:00
$URL = 'https://robohash.org/'.md5($Username)."?set=set$Type&amp;size={$Size}x$Size";
2012-11-01 08:00:21 +00:00
}
2013-04-07 08:00:41 +00:00
if ($ShowAvatar == True && !empty($Avatar)) {
2013-05-28 08:01:02 +00:00
$ToReturn = ($ReturnHTML ? "<img src=\"$Avatar\" width=\"$Size\" style=\"max-height: 400px;\" alt=\"$Username avatar\" />" : $Avatar);
2013-04-07 08:00:41 +00:00
} else {
2013-05-28 08:01:02 +00:00
$ToReturn = ($ReturnHTML ? "<img src=\"$URL\" width=\"$Size\" style=\"max-height: 400px;\" alt=\"Default avatar\" />" : $URL);
2012-11-01 08:00:21 +00:00
}
break;
default:
2013-04-19 08:00:55 +00:00
$URL = STATIC_SERVER.'common/avatars/default.png';
2013-05-28 08:01:02 +00:00
$ToReturn = ($ReturnHTML ? "<img src=\"$URL\" width=\"$Size\" style=\"max-height: 400px;\" alt=\"Default avatar\" />" : $URL);
2012-11-01 08:00:21 +00:00
}
return $ToReturn;
}
2012-11-16 08:00:21 +00:00
2012-11-01 08:00:21 +00:00
public static function has_avatars_enabled() {
global $HeavyInfo;
return $HeavyInfo['DisableAvatars'] != 1;
}
2012-10-11 08:00:15 +00:00
}