Cleaned up random queries, closes #132.
This commit is contained in:
parent
feea91f89e
commit
96c665bfd5
13 changed files with 249 additions and 182 deletions
|
@ -75,20 +75,20 @@ switch ($authMode) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$resetUser = (int)($_POST['user'] ?? $_GET['u'] ?? 0);
|
$resetUserId = (int)($_POST['user'] ?? $_GET['u'] ?? 0);
|
||||||
$getResetUser = db_prepare('
|
|
||||||
SELECT `user_id`, `username`
|
|
||||||
FROM `msz_users`
|
|
||||||
WHERE `user_id` = :user_id
|
|
||||||
');
|
|
||||||
$getResetUser->bindValue('user_id', $resetUser);
|
|
||||||
$resetUser = db_fetch($getResetUser);
|
|
||||||
|
|
||||||
if (empty($resetUser)) {
|
if (empty($resetUserId)) {
|
||||||
header('Location: /auth.php?m=forgot');
|
header('Location: /auth.php?m=forgot');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$resetUsername = user_username_from_id($resetUserId);
|
||||||
|
|
||||||
|
if (empty($resetUsername)) {
|
||||||
|
header('Location: /auth.php');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
tpl_var('auth_reset_message', "A verification code should've been sent to your e-mail address.");
|
tpl_var('auth_reset_message', "A verification code should've been sent to your e-mail address.");
|
||||||
|
|
||||||
while ($isSubmission) {
|
while ($isSubmission) {
|
||||||
|
@ -97,7 +97,7 @@ switch ($authMode) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!user_recovery_token_validate($resetUser['user_id'], $authVerification)) {
|
if (!user_recovery_token_validate($resetUserId, $authVerification)) {
|
||||||
tpl_var('auth_reset_error', 'Invalid verification code!');
|
tpl_var('auth_reset_error', 'Invalid verification code!');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -116,20 +116,23 @@ switch ($authMode) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (user_password_set($resetUser['user_id'], $authPassword['new'])) {
|
if (user_password_set($resetUserId, $authPassword['new'])) {
|
||||||
audit_log(MSZ_AUDIT_PASSWORD_RESET, $resetUser['user_id']);
|
audit_log(MSZ_AUDIT_PASSWORD_RESET, $resetUserId);
|
||||||
} else {
|
} else {
|
||||||
throw new UnexpectedValueException('Password reset failed.');
|
throw new UnexpectedValueException('Password reset failed.');
|
||||||
}
|
}
|
||||||
|
|
||||||
user_recovery_token_invalidate($resetUser['user_id'], $authVerification);
|
user_recovery_token_invalidate($resetUserId, $authVerification);
|
||||||
|
|
||||||
header("Location: /auth.php?m=login&u={$resetUser['user_id']}");
|
header("Location: /auth.php?m=login&u={$resetUserId}");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo tpl_render('auth.password', [
|
echo tpl_render('auth.password', [
|
||||||
'reset_user' => $resetUser,
|
'reset_user' => [
|
||||||
|
'user_id' => $resetUserId,
|
||||||
|
'username' => $resetUsername,
|
||||||
|
],
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -150,13 +153,7 @@ switch ($authMode) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$forgotUser = db_prepare('
|
$forgotUser = user_find_for_reset($authEmail);
|
||||||
SELECT `user_id`, `username`, `email`
|
|
||||||
FROM `msz_users`
|
|
||||||
WHERE LOWER(`email`) = LOWER(:email)
|
|
||||||
');
|
|
||||||
$forgotUser->bindValue('email', $authEmail);
|
|
||||||
$forgotUser = db_fetch($forgotUser);
|
|
||||||
|
|
||||||
if (empty($forgotUser)) {
|
if (empty($forgotUser)) {
|
||||||
tpl_var('auth_forgot_error', 'This user is not registered with us.');
|
tpl_var('auth_forgot_error', 'This user is not registered with us.');
|
||||||
|
@ -231,16 +228,7 @@ MSG;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$getUser = db_prepare('
|
$userData = user_find_for_login($authUsername);
|
||||||
SELECT `user_id`, `password`
|
|
||||||
FROM `msz_users`
|
|
||||||
WHERE LOWER(`email`) = LOWER(:email)
|
|
||||||
OR LOWER(`username`) = LOWER(:username)
|
|
||||||
');
|
|
||||||
$getUser->bindValue('email', $authUsername);
|
|
||||||
$getUser->bindValue('username', $authUsername);
|
|
||||||
$userData = db_fetch($getUser);
|
|
||||||
$userId = (int)($userData['user_id'] ?? 0);
|
|
||||||
|
|
||||||
$loginFailedError = sprintf(
|
$loginFailedError = sprintf(
|
||||||
"Invalid username or password, %d attempt%s remaining.",
|
"Invalid username or password, %d attempt%s remaining.",
|
||||||
|
@ -248,22 +236,22 @@ MSG;
|
||||||
$remainingAttempts === 2 ? '' : 's'
|
$remainingAttempts === 2 ? '' : 's'
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($userId < 1) {
|
if ($userData['user_id'] < 1) {
|
||||||
user_login_attempt_record(false, null, $ipAddress, $userAgent);
|
user_login_attempt_record(false, null, $ipAddress, $userAgent);
|
||||||
$authLoginError = $loginFailedError;
|
$authLoginError = $loginFailedError;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!password_verify($authPassword, $userData['password'])) {
|
if (!password_verify($authPassword, $userData['password'])) {
|
||||||
user_login_attempt_record(false, $userId, $ipAddress, $userAgent);
|
user_login_attempt_record(false, $userData['user_id'], $ipAddress, $userAgent);
|
||||||
$authLoginError = $loginFailedError;
|
$authLoginError = $loginFailedError;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
user_login_attempt_record(true, $userId, $ipAddress, $userAgent);
|
user_login_attempt_record(true, $userData['user_id'], $ipAddress, $userAgent);
|
||||||
|
|
||||||
if ($loginPermission > 0) {
|
if ($loginPermission > 0) {
|
||||||
$generalPerms = perms_get_user(MSZ_PERMS_GENERAL, $userId);
|
$generalPerms = perms_get_user(MSZ_PERMS_GENERAL, $userData['user_id']);
|
||||||
|
|
||||||
if (!perms_check($generalPerms, $loginPermission)) {
|
if (!perms_check($generalPerms, $loginPermission)) {
|
||||||
$authLoginError = 'Your credentials were correct, but your account lacks the proper permissions to use this website.';
|
$authLoginError = 'Your credentials were correct, but your account lacks the proper permissions to use this website.';
|
||||||
|
@ -271,16 +259,16 @@ MSG;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$sessionKey = user_session_create($userId, $ipAddress, $userAgent);
|
$sessionKey = user_session_create($userData['user_id'], $ipAddress, $userAgent);
|
||||||
|
|
||||||
if ($sessionKey === '') {
|
if ($sessionKey === '') {
|
||||||
$authLoginError = 'Unable to create new session, contact an administrator ASAP.';
|
$authLoginError = 'Unable to create new session, contact an administrator ASAP.';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
user_session_start($userId, $sessionKey);
|
user_session_start($userData['user_id'], $sessionKey);
|
||||||
$cookieLife = strtotime(user_session_current('session_expires'));
|
$cookieLife = strtotime(user_session_current('session_expires'));
|
||||||
set_cookie_m('uid', $userId, $cookieLife);
|
set_cookie_m('uid', $userData['user_id'], $cookieLife);
|
||||||
set_cookie_m('sid', $sessionKey, $cookieLife);
|
set_cookie_m('sid', $sessionKey, $cookieLife);
|
||||||
|
|
||||||
if (!is_local_url($authRedirect)) {
|
if (!is_local_url($authRedirect)) {
|
||||||
|
|
|
@ -9,44 +9,16 @@ $changelogTags = $_GET['t'] ?? '';
|
||||||
tpl_var('comments_perms', $commentPerms = comments_get_perms(user_session_current('user_id', 0)));
|
tpl_var('comments_perms', $commentPerms = comments_get_perms(user_session_current('user_id', 0)));
|
||||||
|
|
||||||
if ($changelogChange > 0) {
|
if ($changelogChange > 0) {
|
||||||
$getChange = db_prepare('
|
$change = changelog_change_get($changelogChange);
|
||||||
SELECT
|
|
||||||
c.`change_id`, c.`change_created`, c.`change_log`, c.`change_text`,
|
|
||||||
a.`action_name`, a.`action_colour`, a.`action_class`,
|
|
||||||
u.`user_id`, u.`username`, u.`display_role` as `user_role`,
|
|
||||||
DATE(`change_created`) as `change_date`,
|
|
||||||
COALESCE(u.`user_title`, r.`role_title`) as `user_title`,
|
|
||||||
COALESCE(u.`user_colour`, r.`role_colour`) as `user_colour`
|
|
||||||
FROM `msz_changelog_changes` as c
|
|
||||||
LEFT JOIN `msz_users` as u
|
|
||||||
ON u.`user_id` = c.`user_id`
|
|
||||||
LEFT JOIN `msz_roles` as r
|
|
||||||
ON r.`role_id` = u.`display_role`
|
|
||||||
LEFT JOIN `msz_changelog_actions` as a
|
|
||||||
ON a.`action_id` = c.`action_id`
|
|
||||||
WHERE `change_id` = :change_id
|
|
||||||
');
|
|
||||||
$getChange->bindValue('change_id', $changelogChange);
|
|
||||||
$change = db_fetch($getChange);
|
|
||||||
|
|
||||||
if (!$change) {
|
if (!$change) {
|
||||||
echo render_error(404);
|
echo render_error(404);
|
||||||
return;
|
return;
|
||||||
} else {
|
|
||||||
$getTags = db_prepare('
|
|
||||||
SELECT
|
|
||||||
t.`tag_id`, t.`tag_name`, t.`tag_description`
|
|
||||||
FROM `msz_changelog_tags` as t
|
|
||||||
LEFT JOIN `msz_changelog_change_tags` as ct
|
|
||||||
ON ct.`tag_id` = t.`tag_id`
|
|
||||||
WHERE ct.`change_id` = :change_id
|
|
||||||
');
|
|
||||||
$getTags->bindValue('change_id', $change['change_id']);
|
|
||||||
tpl_var('tags', db_fetch_all($getTags));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo tpl_render('changelog.change', [
|
echo tpl_render('changelog.change', [
|
||||||
'change' => $change,
|
'change' => $change,
|
||||||
|
'tags' => changelog_change_tags_get($change['change_id']),
|
||||||
'comments_category' => $commentsCategory = comments_category_info(
|
'comments_category' => $commentsCategory = comments_category_info(
|
||||||
"changelog-date-{$change['change_date']}",
|
"changelog-date-{$change['change_date']}",
|
||||||
true
|
true
|
||||||
|
|
|
@ -8,7 +8,7 @@ if ($forumId === 0) {
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
$forum = forum_fetch($forumId);
|
$forum = forum_get($forumId);
|
||||||
$forumUserId = user_session_current('user_id', 0);
|
$forumUserId = user_session_current('user_id', 0);
|
||||||
|
|
||||||
if (empty($forum) || ($forum['forum_type'] == MSZ_FORUM_TYPE_LINK && empty($forum['forum_link']))) {
|
if (empty($forum) || ($forum['forum_type'] == MSZ_FORUM_TYPE_LINK && empty($forum['forum_link']))) {
|
||||||
|
|
|
@ -54,13 +54,7 @@ if (!empty($topicId)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($forumId)) {
|
if (!empty($forumId)) {
|
||||||
$getForum = db_prepare('
|
$forum = forum_get($forumId);
|
||||||
SELECT `forum_id`, `forum_name`, `forum_type`, `forum_archived`
|
|
||||||
FROM `msz_forum_categories`
|
|
||||||
WHERE `forum_id` = :forum_id
|
|
||||||
');
|
|
||||||
$getForum->bindValue('forum_id', $forumId);
|
|
||||||
$forum = db_fetch($getForum);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($forum)) {
|
if (empty($forum)) {
|
||||||
|
@ -223,19 +217,7 @@ if ($mode === 'edit') { // $post is pretty much sure to be populated at this poi
|
||||||
tpl_var('posting_post', $post);
|
tpl_var('posting_post', $post);
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetches additional data for simulating a forum post
|
$displayInfo = forum_posting_info(user_session_current('user_id'));
|
||||||
$getDisplayInfo = db_prepare('
|
|
||||||
SELECT u.`user_country`, u.`user_created`, (
|
|
||||||
SELECT COUNT(`post_id`)
|
|
||||||
FROM `msz_forum_posts`
|
|
||||||
WHERE `user_id` = u.`user_id`
|
|
||||||
AND `post_deleted` IS NULL
|
|
||||||
) AS `user_forum_posts`
|
|
||||||
FROM `msz_users` as u
|
|
||||||
WHERE `user_id` = :user_id
|
|
||||||
');
|
|
||||||
$getDisplayInfo->bindValue('user_id', user_session_current('user_id'));
|
|
||||||
$displayInfo = db_fetch($getDisplayInfo);
|
|
||||||
|
|
||||||
echo tpl_render('forum.posting', [
|
echo tpl_render('forum.posting', [
|
||||||
'posting_breadcrumbs' => forum_get_breadcrumbs($forumId),
|
'posting_breadcrumbs' => forum_get_breadcrumbs($forumId),
|
||||||
|
|
|
@ -58,19 +58,7 @@ $canManageUsers = perms_check(
|
||||||
MSZ_PERM_USER_MANAGE_USERS
|
MSZ_PERM_USER_MANAGE_USERS
|
||||||
);
|
);
|
||||||
|
|
||||||
$getRole = db_prepare('
|
$role = user_role_get($roleId);
|
||||||
SELECT
|
|
||||||
`role_id`, `role_name`, `role_colour`, `role_description`, `role_created`,
|
|
||||||
(
|
|
||||||
SELECT COUNT(`user_id`)
|
|
||||||
FROM `msz_user_roles`
|
|
||||||
WHERE `role_id` = r.`role_id`
|
|
||||||
) as `role_user_count`
|
|
||||||
FROM `msz_roles` as r
|
|
||||||
WHERE `role_id` = :role_id
|
|
||||||
');
|
|
||||||
$getRole->bindValue('role_id', $roleId);
|
|
||||||
$role = db_fetch($getRole);
|
|
||||||
|
|
||||||
if (empty($role)) {
|
if (empty($role)) {
|
||||||
echo render_error(404);
|
echo render_error(404);
|
||||||
|
@ -85,18 +73,13 @@ if (!pagination_is_valid_offset($usersOffset)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$roles = db_query('
|
$roles = user_role_all();
|
||||||
SELECT `role_id`, `role_name`, `role_colour`
|
|
||||||
FROM `msz_roles`
|
|
||||||
WHERE `role_hidden` = 0
|
|
||||||
ORDER BY `role_id`
|
|
||||||
')->fetchAll(PDO::FETCH_ASSOC);
|
|
||||||
|
|
||||||
$getUsers = db_prepare(sprintf(
|
$getUsers = db_prepare(sprintf(
|
||||||
'
|
'
|
||||||
SELECT
|
SELECT
|
||||||
u.`user_id`, u.`username`, u.`user_country`, r.`role_id`,
|
u.`user_id`, u.`username`, u.`user_country`, r.`role_id`,
|
||||||
COALESCE(u.`user_title`, r.`role_title`, r.`role_name`) as `user_title`,
|
COALESCE(u.`user_title`, r.`role_title`) as `user_title`,
|
||||||
COALESCE(u.`user_colour`, r.`role_colour`) as `user_colour`
|
COALESCE(u.`user_colour`, r.`role_colour`) as `user_colour`
|
||||||
FROM `msz_users` as u
|
FROM `msz_users` as u
|
||||||
LEFT JOIN `msz_roles` as r
|
LEFT JOIN `msz_roles` as r
|
||||||
|
|
|
@ -89,19 +89,7 @@ switch ($mode) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
$getUserId = db_prepare('
|
$userId = user_find_for_profile($_GET['u'] ?? 0);
|
||||||
SELECT
|
|
||||||
:user_id as `input_id`,
|
|
||||||
(
|
|
||||||
SELECT `user_id`
|
|
||||||
FROM `msz_users`
|
|
||||||
WHERE `user_id` = `input_id`
|
|
||||||
OR LOWER(`username`) = LOWER(`input_id`)
|
|
||||||
LIMIT 1
|
|
||||||
) as `user_id`
|
|
||||||
');
|
|
||||||
$getUserId->bindValue('user_id', $_GET['u'] ?? 0);
|
|
||||||
$userId = (int)($getUserId->execute() ? $getUserId->fetchColumn(1) : 0);
|
|
||||||
|
|
||||||
if ($userId < 1) {
|
if ($userId < 1) {
|
||||||
http_response_code(404);
|
http_response_code(404);
|
||||||
|
@ -335,52 +323,7 @@ switch ($mode) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$getProfile = db_prepare(
|
$profile = user_profile_get($userId);
|
||||||
sprintf(
|
|
||||||
'
|
|
||||||
SELECT
|
|
||||||
u.`user_id`, u.`username`, u.`user_country`, u.`user_birthdate`,
|
|
||||||
u.`user_created`, u.`user_active`,
|
|
||||||
u.`user_about_parser`, u.`user_about_content`, u.`user_background_settings`,
|
|
||||||
%1$s,
|
|
||||||
COALESCE(u.`user_title`, r.`role_title`) as `user_title`,
|
|
||||||
COALESCE(u.`user_colour`, r.`role_colour`) as `user_colour`,
|
|
||||||
`user_background_settings` & 0x0F as `user_background_attachment`,
|
|
||||||
(`user_background_settings` & %2$d) > 0 as `user_background_blend`,
|
|
||||||
(`user_background_settings` & %3$d) > 0 as `user_background_slide`,
|
|
||||||
(
|
|
||||||
SELECT COUNT(`topic_id`)
|
|
||||||
FROM `msz_forum_topics`
|
|
||||||
WHERE `user_id` = u.`user_id`
|
|
||||||
) as `forum_topic_count`,
|
|
||||||
(
|
|
||||||
SELECT COUNT(`post_id`)
|
|
||||||
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`
|
|
||||||
) as `changelog_count`,
|
|
||||||
(
|
|
||||||
SELECT COUNT(`comment_id`)
|
|
||||||
FROM `msz_comments_posts`
|
|
||||||
WHERE `user_id` = u.`user_id`
|
|
||||||
) as `comments_count`
|
|
||||||
FROM `msz_users` as u
|
|
||||||
LEFT JOIN `msz_roles` as r
|
|
||||||
ON r.`role_id` = u.`display_role`
|
|
||||||
WHERE `user_id` = :user_id
|
|
||||||
LIMIT 1
|
|
||||||
',
|
|
||||||
pdo_prepare_array(user_profile_fields_get(), true, 'u.`user_%s`'),
|
|
||||||
MSZ_USER_BACKGROUND_ATTRIBUTE_BLEND,
|
|
||||||
MSZ_USER_BACKGROUND_ATTRIBUTE_SLIDE
|
|
||||||
)
|
|
||||||
);
|
|
||||||
$getProfile->bindValue('user_id', $userId);
|
|
||||||
$profile = db_fetch($getProfile);
|
|
||||||
|
|
||||||
$backgroundPath = build_path(MSZ_STORAGE, 'backgrounds/original', "{$profile['user_id']}.msz");
|
$backgroundPath = build_path(MSZ_STORAGE, 'backgrounds/original', "{$profile['user_id']}.msz");
|
||||||
|
|
||||||
|
|
|
@ -173,16 +173,7 @@ $logs['list'] = audit_log_list(
|
||||||
user_session_current('user_id')
|
user_session_current('user_id')
|
||||||
);
|
);
|
||||||
|
|
||||||
$getUserRoles = db_prepare('
|
$userRoles = user_role_all_user(user_session_current('user_id'));
|
||||||
SELECT r.`role_id`, r.`role_name`, r.`role_description`, r.`role_colour`, r.`role_can_leave`
|
|
||||||
FROM `msz_user_roles` as ur
|
|
||||||
LEFT JOIN `msz_roles` as r
|
|
||||||
ON r.`role_id` = ur.`role_id`
|
|
||||||
WHERE ur.`user_id` = :user_id
|
|
||||||
ORDER BY r.`role_hierarchy` DESC
|
|
||||||
');
|
|
||||||
$getUserRoles->bindValue('user_id', user_session_current('user_id'));
|
|
||||||
$userRoles = db_fetch_all($getUserRoles);
|
|
||||||
|
|
||||||
echo tpl_render('user.settings', [
|
echo tpl_render('user.settings', [
|
||||||
'errors' => $errors,
|
'errors' => $errors,
|
||||||
|
|
|
@ -80,7 +80,7 @@ function forum_may_have_topics(int $forumType): bool
|
||||||
return in_array($forumType, MSZ_FORUM_MAY_HAVE_TOPICS);
|
return in_array($forumType, MSZ_FORUM_MAY_HAVE_TOPICS);
|
||||||
}
|
}
|
||||||
|
|
||||||
function forum_fetch(int $forumId, bool $showDeleted = false): array
|
function forum_get(int $forumId, bool $showDeleted = false): array
|
||||||
{
|
{
|
||||||
$getForum = db_prepare(sprintf(
|
$getForum = db_prepare(sprintf(
|
||||||
'
|
'
|
||||||
|
@ -429,3 +429,29 @@ function forum_mark_read(?int $forumId, int $userId): bool
|
||||||
|
|
||||||
return $doMark->execute();
|
return $doMark->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function forum_posting_info(int $userId): array
|
||||||
|
{
|
||||||
|
$getPostingInfo = db_prepare('
|
||||||
|
SELECT
|
||||||
|
u.`user_country`, u.`user_created`,
|
||||||
|
(
|
||||||
|
SELECT COUNT(`post_id`)
|
||||||
|
FROM `msz_forum_posts`
|
||||||
|
WHERE `user_id` = u.`user_id`
|
||||||
|
AND `post_deleted` IS NULL
|
||||||
|
) AS `user_forum_posts`,
|
||||||
|
(
|
||||||
|
SELECT `post_parse`
|
||||||
|
FROM `msz_forum_posts`
|
||||||
|
WHERE `user_id` = u.`user_id`
|
||||||
|
AND `post_deleted` IS NULL
|
||||||
|
ORDER BY `post_id` DESC
|
||||||
|
LIMIT 1
|
||||||
|
) AS `user_post_parse`
|
||||||
|
FROM `msz_users` as u
|
||||||
|
WHERE `user_id` = :user_id
|
||||||
|
');
|
||||||
|
$getPostingInfo->bindValue('user_id', $userId);
|
||||||
|
return db_fetch($getPostingInfo);
|
||||||
|
}
|
||||||
|
|
|
@ -203,3 +203,53 @@ function user_profile_fields_display(array $user, bool $hideEmpty = true): array
|
||||||
|
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function user_profile_get(int $userId): array
|
||||||
|
{
|
||||||
|
$getProfile = db_prepare(
|
||||||
|
sprintf(
|
||||||
|
'
|
||||||
|
SELECT
|
||||||
|
u.`user_id`, u.`username`, u.`user_country`, u.`user_birthdate`,
|
||||||
|
u.`user_created`, u.`user_active`,
|
||||||
|
u.`user_about_parser`, u.`user_about_content`, u.`user_background_settings`,
|
||||||
|
%1$s,
|
||||||
|
COALESCE(u.`user_title`, r.`role_title`) as `user_title`,
|
||||||
|
COALESCE(u.`user_colour`, r.`role_colour`) as `user_colour`,
|
||||||
|
`user_background_settings` & 0x0F as `user_background_attachment`,
|
||||||
|
(`user_background_settings` & %2$d) > 0 as `user_background_blend`,
|
||||||
|
(`user_background_settings` & %3$d) > 0 as `user_background_slide`,
|
||||||
|
(
|
||||||
|
SELECT COUNT(`topic_id`)
|
||||||
|
FROM `msz_forum_topics`
|
||||||
|
WHERE `user_id` = u.`user_id`
|
||||||
|
) as `forum_topic_count`,
|
||||||
|
(
|
||||||
|
SELECT COUNT(`post_id`)
|
||||||
|
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`
|
||||||
|
) as `changelog_count`,
|
||||||
|
(
|
||||||
|
SELECT COUNT(`comment_id`)
|
||||||
|
FROM `msz_comments_posts`
|
||||||
|
WHERE `user_id` = u.`user_id`
|
||||||
|
) as `comments_count`
|
||||||
|
FROM `msz_users` as u
|
||||||
|
LEFT JOIN `msz_roles` as r
|
||||||
|
ON r.`role_id` = u.`display_role`
|
||||||
|
WHERE `user_id` = :user_id
|
||||||
|
LIMIT 1
|
||||||
|
',
|
||||||
|
pdo_prepare_array(user_profile_fields_get(), true, 'u.`user_%s`'),
|
||||||
|
MSZ_USER_BACKGROUND_ATTRIBUTE_BLEND,
|
||||||
|
MSZ_USER_BACKGROUND_ATTRIBUTE_SLIDE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$getProfile->bindValue('user_id', $userId);
|
||||||
|
return db_fetch($getProfile);
|
||||||
|
}
|
||||||
|
|
|
@ -81,3 +81,57 @@ function user_role_get_display(int $userId): int
|
||||||
$fetchRole->bindValue('user_id', $userId);
|
$fetchRole->bindValue('user_id', $userId);
|
||||||
return $fetchRole->execute() ? (int)$fetchRole->fetchColumn() : MSZ_ROLE_MAIN;
|
return $fetchRole->execute() ? (int)$fetchRole->fetchColumn() : MSZ_ROLE_MAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function user_role_all_user(int $userId): array
|
||||||
|
{
|
||||||
|
$getUserRoles = db_prepare('
|
||||||
|
SELECT
|
||||||
|
r.`role_id`, r.`role_name`, r.`role_description`,
|
||||||
|
r.`role_colour`, r.`role_can_leave`, r.`role_created`
|
||||||
|
FROM `msz_user_roles` AS ur
|
||||||
|
LEFT JOIN `msz_roles` AS r
|
||||||
|
ON r.`role_id` = ur.`role_id`
|
||||||
|
WHERE ur.`user_id` = :user_id
|
||||||
|
ORDER BY r.`role_hierarchy` DESC
|
||||||
|
');
|
||||||
|
$getUserRoles->bindValue('user_id', $userId);
|
||||||
|
return db_fetch_all($getUserRoles);
|
||||||
|
}
|
||||||
|
|
||||||
|
function user_role_all(bool $withHidden = false)
|
||||||
|
{
|
||||||
|
return db_query(sprintf(
|
||||||
|
'
|
||||||
|
SELECT
|
||||||
|
r.`role_id`, r.`role_name`, r.`role_description`,
|
||||||
|
r.`role_colour`, r.`role_can_leave`, r.`role_created`,
|
||||||
|
(
|
||||||
|
SELECT COUNT(`user_id`)
|
||||||
|
FROM `msz_user_roles`
|
||||||
|
WHERE `role_id` = r.`role_id`
|
||||||
|
) AS `role_user_count`
|
||||||
|
FROM `msz_roles` AS r
|
||||||
|
%s
|
||||||
|
ORDER BY `role_id`
|
||||||
|
',
|
||||||
|
$withHidden ? '' : 'WHERE `role_hidden` = 0'
|
||||||
|
))->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
}
|
||||||
|
|
||||||
|
function user_role_get(int $roleId): array
|
||||||
|
{
|
||||||
|
$getRole = db_prepare('
|
||||||
|
SELECT
|
||||||
|
r.`role_id`, r.`role_name`, r.`role_description`,
|
||||||
|
r.`role_colour`, r.`role_can_leave`, r.`role_created`,
|
||||||
|
(
|
||||||
|
SELECT COUNT(`user_id`)
|
||||||
|
FROM `msz_user_roles`
|
||||||
|
WHERE `role_id` = r.`role_id`
|
||||||
|
) AS `role_user_count`
|
||||||
|
FROM `msz_roles` AS r
|
||||||
|
WHERE `role_id` = :role_id
|
||||||
|
');
|
||||||
|
$getRole->bindValue('role_id', $roleId);
|
||||||
|
return db_fetch($getRole);
|
||||||
|
}
|
||||||
|
|
|
@ -55,6 +55,47 @@ function user_create(
|
||||||
return $createUser->execute() ? (int)db_last_insert_id() : 0;
|
return $createUser->execute() ? (int)db_last_insert_id() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function user_find_for_login(string $usernameOrMail): array
|
||||||
|
{
|
||||||
|
$getUser = db_prepare('
|
||||||
|
SELECT `user_id`, `password`
|
||||||
|
FROM `msz_users`
|
||||||
|
WHERE LOWER(`email`) = LOWER(:email)
|
||||||
|
OR LOWER(`username`) = LOWER(:username)
|
||||||
|
');
|
||||||
|
$getUser->bindValue('email', $usernameOrMail);
|
||||||
|
$getUser->bindValue('username', $usernameOrMail);
|
||||||
|
return db_fetch($getUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
function user_find_for_reset(string $email): array
|
||||||
|
{
|
||||||
|
$getUser = db_prepare('
|
||||||
|
SELECT `user_id`, `username`, `email`
|
||||||
|
FROM `msz_users`
|
||||||
|
WHERE LOWER(`email`) = LOWER(:email)
|
||||||
|
');
|
||||||
|
$getUser->bindValue('email', $email);
|
||||||
|
return db_fetch($getUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
function user_find_for_profile(string $idOrUsername): int
|
||||||
|
{
|
||||||
|
$getUserId = db_prepare('
|
||||||
|
SELECT
|
||||||
|
:user_id as `input_id`,
|
||||||
|
(
|
||||||
|
SELECT `user_id`
|
||||||
|
FROM `msz_users`
|
||||||
|
WHERE `user_id` = `input_id`
|
||||||
|
OR LOWER(`username`) = LOWER(`input_id`)
|
||||||
|
LIMIT 1
|
||||||
|
) as `user_id`
|
||||||
|
');
|
||||||
|
$getUserId->bindValue('user_id', $idOrUsername);
|
||||||
|
return (int)($getUserId->execute() ? $getUserId->fetchColumn(1) : 0);
|
||||||
|
}
|
||||||
|
|
||||||
function user_password_hash(string $password): string
|
function user_password_hash(string $password): string
|
||||||
{
|
{
|
||||||
return password_hash($password, MSZ_USERS_PASSWORD_HASH_ALGO);
|
return password_hash($password, MSZ_USERS_PASSWORD_HASH_ALGO);
|
||||||
|
|
|
@ -120,3 +120,40 @@ function changelog_count_changes(string $date, int $user): int
|
||||||
|
|
||||||
return $prep->execute() ? (int)$prep->fetchColumn() : 0;
|
return $prep->execute() ? (int)$prep->fetchColumn() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function changelog_change_get(int $changeId): array
|
||||||
|
{
|
||||||
|
$getChange = db_prepare('
|
||||||
|
SELECT
|
||||||
|
c.`change_id`, c.`change_created`, c.`change_log`, c.`change_text`,
|
||||||
|
a.`action_name`, a.`action_colour`, a.`action_class`,
|
||||||
|
u.`user_id`, u.`username`, u.`display_role` as `user_role`,
|
||||||
|
DATE(`change_created`) as `change_date`,
|
||||||
|
COALESCE(u.`user_title`, r.`role_title`) as `user_title`,
|
||||||
|
COALESCE(u.`user_colour`, r.`role_colour`) as `user_colour`
|
||||||
|
FROM `msz_changelog_changes` as c
|
||||||
|
LEFT JOIN `msz_users` as u
|
||||||
|
ON u.`user_id` = c.`user_id`
|
||||||
|
LEFT JOIN `msz_roles` as r
|
||||||
|
ON r.`role_id` = u.`display_role`
|
||||||
|
LEFT JOIN `msz_changelog_actions` as a
|
||||||
|
ON a.`action_id` = c.`action_id`
|
||||||
|
WHERE `change_id` = :change_id
|
||||||
|
');
|
||||||
|
$getChange->bindValue('change_id', $changeId);
|
||||||
|
return db_fetch($getChange);
|
||||||
|
}
|
||||||
|
|
||||||
|
function changelog_change_tags_get(int $changeId): array
|
||||||
|
{
|
||||||
|
$getTags = db_prepare('
|
||||||
|
SELECT
|
||||||
|
t.`tag_id`, t.`tag_name`, t.`tag_description`
|
||||||
|
FROM `msz_changelog_tags` as t
|
||||||
|
LEFT JOIN `msz_changelog_change_tags` as ct
|
||||||
|
ON ct.`tag_id` = t.`tag_id`
|
||||||
|
WHERE ct.`change_id` = :change_id
|
||||||
|
');
|
||||||
|
$getTags->bindValue('change_id', $changeId);
|
||||||
|
return db_fetch_all($getTags);
|
||||||
|
}
|
||||||
|
|
|
@ -69,8 +69,8 @@
|
||||||
{{ input_select(
|
{{ input_select(
|
||||||
'post[parser]',
|
'post[parser]',
|
||||||
constant('MSZ_PARSERS_NAMES'),
|
constant('MSZ_PARSERS_NAMES'),
|
||||||
posting_defaults.parser|default(posting_post.post_parse|default(constant('MSZ_PARSER_BBCODE'))),
|
posting_defaults.parser|default(posting_post.post_parse|default(posting_info.user_post_parse|default(constant('MSZ_PARSER_BBCODE')))),
|
||||||
null, null, null, 'forum__post__dropdown'
|
null, null, false, 'forum__post__dropdown'
|
||||||
) }}
|
) }}
|
||||||
{% if is_opening and posting_types|length > 1 %}
|
{% if is_opening and posting_types|length > 1 %}
|
||||||
{{ input_select(
|
{{ input_select(
|
||||||
|
|
Loading…
Add table
Reference in a new issue