misuzu/public/profile.php

105 lines
3.3 KiB
PHP
Raw Normal View History

<?php
2018-05-16 04:58:21 +02:00
use Misuzu\Database;
2018-03-24 05:31:42 +01:00
use Misuzu\IO\File;
require_once __DIR__ . '/../misuzu.php';
2018-03-22 18:56:35 +01:00
$user_id = (int)($_GET['u'] ?? 0);
2018-03-24 05:31:42 +01:00
$mode = (string)($_GET['m'] ?? 'view');
2018-03-22 18:56:35 +01:00
2018-03-24 05:31:42 +01:00
switch ($mode) {
case 'avatar':
$avatar_filename = $app->getDefaultAvatar();
2018-05-16 04:58:21 +02:00
$user_avatar = "{$user_id}.msz";
$cropped_avatar = build_path(
create_directory(build_path($app->getStoragePath(), 'avatars/200x200')),
$user_avatar
);
2018-05-16 04:58:21 +02:00
if (is_file($cropped_avatar)) {
2018-05-16 04:58:21 +02:00
$avatar_filename = $cropped_avatar;
} else {
$original_avatar = build_path($app->getStoragePath(), 'avatars/original', $user_avatar);
2018-05-16 04:58:21 +02:00
if (is_file($original_avatar)) {
2018-05-16 04:58:21 +02:00
try {
file_put_contents(
2018-05-16 04:58:21 +02:00
$cropped_avatar,
crop_image_centred_path($original_avatar, 200, 200)->getImagesBlob(),
LOCK_EX
2018-05-16 04:58:21 +02:00
);
$avatar_filename = $cropped_avatar;
} catch (Exception $ex) {
2018-03-24 05:31:42 +01:00
}
}
}
header('Content-Type: ' . mime_content_type($avatar_filename));
echo file_get_contents($avatar_filename);
2018-03-24 05:31:42 +01:00
break;
case 'background':
$user_background = build_path(
create_directory(build_path($app->getStoragePath(), 'backgrounds/original')),
"{$user_id}.msz"
);
if (!is_file($user_background)) {
echo render_error(404);
break;
}
header('Content-Type: ' . mime_content_type($user_background));
echo file_get_contents($user_background);
break;
2018-03-24 05:31:42 +01:00
case 'view':
default:
$getProfile = Database::prepare('
2018-05-16 04:58:21 +02:00
SELECT
u.*,
2018-05-28 01:24:16 +02:00
COALESCE(u.`user_title`, r.`role_title`) as `user_title`,
COALESCE(u.`user_colour`, r.`role_colour`) as `user_colour`,
2018-05-18 03:20:27 +02:00
(
SELECT COUNT(`topic_id`)
2018-07-06 03:28:06 +02:00
FROM `msz_forum_topics`
WHERE `user_id` = u.`user_id`
2018-05-18 03:20:27 +02:00
) as `forum_topic_count`,
(
SELECT COUNT(`post_id`)
2018-07-06 03:28:06 +02:00
FROM `msz_forum_posts`
WHERE `user_id` = u.`user_id`
) as `forum_post_count`,
(
SELECT COUNT(`change_id`)
FROM `msz_changelog_changes`
WHERE `user_id` = u.`user_id`
2018-08-12 15:35:50 +02:00
) as `changelog_count`,
(
SELECT COUNT(`comment_id`)
FROM `msz_comments_posts`
WHERE `user_id` = u.`user_id`
) as `comments_count`
2018-05-16 04:58:21 +02:00
FROM `msz_users` as u
LEFT JOIN `msz_roles` as r
ON r.`role_id` = u.`display_role`
WHERE `user_id` = :user_id
');
$getProfile->bindValue('user_id', $user_id);
$profile = $getProfile->execute() ? $getProfile->fetch() : [];
if (!$profile) {
2018-03-24 05:31:42 +01:00
http_response_code(404);
2018-08-15 03:12:58 +02:00
echo tpl_render('user.notfound');
2018-03-24 05:31:42 +01:00
break;
}
tpl_vars([
'profile' => $profile,
'has_background' => is_file(build_path($app->getStoragePath(), 'backgrounds/original', "{$profile['user_id']}.msz")),
]);
2018-08-15 03:12:58 +02:00
echo tpl_render('user.view');
2018-03-24 05:31:42 +01:00
break;
}