diff --git a/misuzu.php b/misuzu.php index dad3620b..8bfc570f 100644 --- a/misuzu.php +++ b/misuzu.php @@ -16,6 +16,7 @@ require_once __DIR__ . '/src/perms.php'; require_once __DIR__ . '/src/tpl.php'; require_once __DIR__ . '/src/zalgo.php'; require_once __DIR__ . '/src/Forum/forum.php'; +require_once __DIR__ . '/src/Forum/perms.php'; require_once __DIR__ . '/src/Forum/post.php'; require_once __DIR__ . '/src/Forum/topic.php'; require_once __DIR__ . '/src/Forum/validate.php'; diff --git a/src/Forum/perms.php b/src/Forum/perms.php new file mode 100644 index 00000000..b99cd4f4 --- /dev/null +++ b/src/Forum/perms.php @@ -0,0 +1,147 @@ +bindValue('forum_id', $forum); + $getPerms->bindValue('user_id_1', $user); + $getPerms->bindValue('user_id_2', $user); + return $getPerms->execute() ? (int)$getPerms->fetchColumn() : 0; +} + +function forum_perms_get_role(string $prefix, ?int $forum, int $role): int +{ + if (!in_array($prefix, MSZ_FORUM_PERM_MODES) || $role < 1) { + return 0; + } + + $getPerms = Database::prepare(" + SELECT `{$prefix}_perms_allow` &~ `{$prefix}_perms_deny` + FROM `msz_forum_permissions` + WHERE ( + `forum_id` = :forum_id + OR `forum_id` IS NULL + ) + AND `role_id` = :role_id + AND `user_id` IS NULL + "); + $getPerms->bindValue('forum_id', $forum); + $getPerms->bindValue('role_id', $role); + return $getPerms->execute() ? (int)$getPerms->fetchColumn() : 0; +} + +function perms_get_user_raw(?int $forum, int $user): array +{ + $emptyPerms = forum_perms_create(); + + if ($user < 1) { + return $emptyPerms; + } + + $getPerms = Database::prepare(' + SELECT + `' . implode('`, `', forum_perms_get_keys()) . '` + FROM `msz_forum_permissions` + WHERE `user_id` = :user_id + AND `role_id` IS NULL + '); + $getPerms->bindValue('forum_id', $user); + $getPerms->bindValue('user_id', $user); + + if (!$getPerms->execute()) { + return $emptyPerms; + } + + $perms = $getPerms->fetch(PDO::FETCH_ASSOC); + + if (!$perms) { + return $emptyPerms; + } + + return $perms; +} + +function perms_get_role_raw(int $role): array +{ + $emptyPerms = perms_create(); + + if ($role < 1) { + return $emptyPerms; + } + + $getPerms = Database::prepare(' + SELECT + `' . implode('`, `', perms_get_keys()) . '` + FROM `msz_permissions` + WHERE `user_id` IS NULL + AND `role_id` = :role_id + '); + $getPerms->bindValue('role_id', $role); + + if (!$getPerms->execute()) { + return $emptyPerms; + } + + $perms = $getPerms->fetch(PDO::FETCH_ASSOC); + + if (!$perms) { + return $emptyPerms; + } + + return $perms; +}