togethere.cloud/public_html/includes/user_avatar.php

104 lines
2.6 KiB
PHP

<?php
declare(strict_types=1);
if (defined('OG_USER_AVATAR_HELPER_LOADED')) {
return;
}
define('OG_USER_AVATAR_HELPER_LOADED', true);
function og_users_has_column(PDO $pdo, string $columnName): bool
{
try {
$database = (string)$pdo->query('SELECT DATABASE()')->fetchColumn();
if ($database === '') {
return false;
}
$stmt = $pdo->prepare(
'SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = :schema AND table_name = :table AND column_name = :column'
);
$stmt->execute([
':schema' => $database,
':table' => 'users',
':column' => $columnName,
]);
return (int)$stmt->fetchColumn() > 0;
} catch (Throwable $e) {
return false;
}
}
function og_ensure_users_avatar_column(PDO $pdo): bool
{
if (og_users_has_column($pdo, 'profile_avatar_file')) {
return true;
}
try {
$pdo->exec('ALTER TABLE users ADD COLUMN profile_avatar_file VARCHAR(255) NULL AFTER phone_number');
} catch (Throwable $e) {
return og_users_has_column($pdo, 'profile_avatar_file');
}
return og_users_has_column($pdo, 'profile_avatar_file');
}
function og_get_user_avatar_file(PDO $pdo, int $userId): ?string
{
if (!og_users_has_column($pdo, 'profile_avatar_file')) {
return null;
}
try {
$stmt = $pdo->prepare('SELECT profile_avatar_file FROM users WHERE id = ? LIMIT 1');
$stmt->execute([$userId]);
$value = $stmt->fetchColumn();
if (!is_string($value)) {
return null;
}
$file = trim($value);
if ($file === '') {
return null;
}
if (!preg_match('/^[A-Za-z0-9._-]{1,255}$/', $file)) {
return null;
}
return $file;
} catch (Throwable $e) {
return null;
}
}
function og_avatar_file_to_url(?string $avatarFile): ?string
{
$file = trim((string)$avatarFile);
if ($file === '') {
return null;
}
if (!preg_match('/^[A-Za-z0-9._-]{1,255}$/', $file)) {
return null;
}
return '/account/avatar.php?f=' . rawurlencode($file);
}
function og_avatar_initial(?string $username): string
{
$name = trim((string)$username);
if ($name === '') {
return '?';
}
if (function_exists('mb_substr') && function_exists('mb_strtoupper')) {
return mb_strtoupper(mb_substr($name, 0, 1, 'UTF-8'), 'UTF-8');
}
return strtoupper(substr($name, 0, 1));
}