misuzu/src/manage.php

624 lines
24 KiB
PHP
Raw Normal View History

2018-07-08 01:24:34 +02:00
<?php
function manage_get_menu(int $userId): array
{
2018-07-10 23:24:00 +02:00
$perms = [];
2018-07-08 01:24:34 +02:00
2018-07-10 23:24:00 +02:00
foreach (MSZ_PERM_MODES as $mode) {
$perms[$mode] = perms_get_user($mode, $userId);
2018-07-08 01:24:34 +02:00
}
if (!perms_check($perms['general'], MSZ_PERM_GENERAL_CAN_MANAGE)) {
2018-07-10 23:24:00 +02:00
return [];
}
2018-07-08 01:24:34 +02:00
$menu = [];
2018-08-15 22:29:18 +02:00
$menu['General']['Overview'] = '/manage/index.php?v=overview';
$menu['General']['Quotes'] = '/manage/index.php?v=quotes';
2018-07-08 01:24:34 +02:00
if (perms_check($perms['general'], MSZ_PERM_GENERAL_VIEW_LOGS)) {
2018-07-10 23:24:00 +02:00
$menu['General']['Logs'] = '/manage/index.php?v=logs';
}
if (perms_check($perms['general'], MSZ_PERM_GENERAL_MANAGE_EMOTICONS)) {
2018-08-15 22:29:18 +02:00
$menu['General']['Emoticons'] = '/manage/index.php?v=emoticons';
2018-07-10 23:24:00 +02:00
}
if (perms_check($perms['general'], MSZ_PERM_GENERAL_MANAGE_SETTINGS)) {
2018-08-15 22:29:18 +02:00
$menu['General']['Settings'] = '/manage/index.php?v=settings';
2018-07-08 01:24:34 +02:00
}
if (perms_check($perms['user'], MSZ_PERM_USER_MANAGE_USERS | MSZ_PERM_USER_MANAGE_PERMS)) {
2018-08-15 22:29:18 +02:00
$menu['Users']['Listing'] = '/manage/users.php?v=listing';
}
2018-07-10 23:24:00 +02:00
if (perms_check($perms['user'], MSZ_PERM_USER_MANAGE_ROLES | MSZ_PERM_USER_MANAGE_PERMS)) {
2018-08-15 22:29:18 +02:00
$menu['Users']['Roles'] = '/manage/users.php?v=roles';
}
2018-07-10 23:24:00 +02:00
if (perms_check($perms['user'], MSZ_PERM_USER_MANAGE_REPORTS)) {
2018-08-15 22:29:18 +02:00
$menu['Users']['Reports'] = '/manage/users.php?v=reports';
2018-07-10 23:24:00 +02:00
}
if (perms_check($perms['user'], MSZ_PERM_USER_MANAGE_RESTRICTIONS)) {
2018-08-15 22:29:18 +02:00
$menu['Users']['Restrictions'] = '/manage/users.php?v=restrictions';
}
2018-07-10 23:24:00 +02:00
if (perms_check($perms['user'], MSZ_PERM_USER_MANAGE_BLACKLISTS)) {
2018-08-15 22:29:18 +02:00
$menu['Users']['Blacklisting'] = '/manage/users.php?v=blacklisting';
}
2018-07-10 23:24:00 +02:00
if (perms_check($perms['news'], MSZ_PERM_NEWS_MANAGE_POSTS)) {
2018-08-15 22:29:18 +02:00
$menu['News']['Posts'] = '/manage/news.php?v=posts';
}
2018-07-10 23:24:00 +02:00
if (perms_check($perms['news'], MSZ_PERM_NEWS_MANAGE_CATEGORIES)) {
2018-08-15 22:29:18 +02:00
$menu['News']['Categories'] = '/manage/news.php?v=categories';
}
2018-07-11 22:03:43 +02:00
if (perms_check($perms['forum'], MSZ_PERM_FORUM_MANAGE_FORUMS)) {
2018-08-26 03:46:33 +02:00
$menu['Forum']['Listing'] = '/manage/forum.php?v=listing';
2018-07-11 22:03:43 +02:00
}
2018-07-08 01:24:34 +02:00
2018-08-15 22:29:18 +02:00
if (perms_check($perms['forum'], 0)) {
2018-08-26 03:46:33 +02:00
$menu['Forum']['Settings'] = '/manage/forum.php?v=settings';
2018-08-15 22:29:18 +02:00
}
2018-07-08 01:24:34 +02:00
if (perms_check($perms['changelog'], MSZ_PERM_CHANGELOG_MANAGE_CHANGES)) {
2018-08-15 22:29:18 +02:00
$menu['Changelog']['Changes'] = '/manage/changelog.php?v=changes';
}
2018-07-08 01:24:34 +02:00
if (perms_check($perms['changelog'], MSZ_PERM_CHANGELOG_MANAGE_TAGS | MSZ_PERM_CHANGELOG_MANAGE_ACTIONS)) {
$menu['Changelog']['Action & Tags'] = '/manage/changelog.php?v=tags';
2018-07-08 01:24:34 +02:00
}
return $menu;
}
2018-07-08 21:24:59 +02:00
function manage_perms_value(int $perm, int $allow, int $deny): string
{
if (perms_check($deny, $perm)) {
return 'never';
}
if (perms_check($allow, $perm)) {
return 'yes';
}
return 'no';
}
function manage_perms_apply(array $list, array $post): ?array
{
$perms = perms_create();
foreach ($list as $section) {
if (empty($post[$section['section']])
|| !is_array($post[$section['section']])) {
continue;
}
$allowKey = perms_get_key($section['section'], 'allow');
$denyKey = perms_get_key($section['section'], 'deny');
foreach ($section['perms'] as $perm) {
if (empty($post[$section['section']][$perm['section']])) {
continue;
}
switch ($post[$section['section']][$perm['section']]) {
case 'yes':
$perms[$allowKey] |= $perm['perm'];
$perms[$denyKey] &= ~$perm['perm'];
break;
case 'never':
$perms[$allowKey] &= ~$perm['perm'];
$perms[$denyKey] |= $perm['perm'];
break;
case 'no':
default:
$perms[$allowKey] &= ~$perm['perm'];
$perms[$denyKey] &= ~$perm['perm'];
break;
}
}
}
$returnNothing = 0;
foreach ($perms as $perm) {
$returnNothing |= $perm;
}
if ($returnNothing === 0) {
return null;
}
return $perms;
}
function manage_perms_list(array $rawPerms): array
{
return [
2018-07-10 23:24:00 +02:00
[
'section' => 'general',
'title' => 'General',
'perms' => [
[
'section' => 'can-manage',
'title' => 'Can access the management panel.',
'perm' => MSZ_PERM_GENERAL_CAN_MANAGE,
2018-07-10 23:24:00 +02:00
'value' => manage_perms_value(
MSZ_PERM_GENERAL_CAN_MANAGE,
2018-07-10 23:24:00 +02:00
$rawPerms['general_perms_allow'],
$rawPerms['general_perms_deny']
),
],
[
'section' => 'view-logs',
'title' => 'Can view audit logs.',
'perm' => MSZ_PERM_GENERAL_VIEW_LOGS,
2018-07-10 23:24:00 +02:00
'value' => manage_perms_value(
MSZ_PERM_GENERAL_VIEW_LOGS,
2018-07-10 23:24:00 +02:00
$rawPerms['general_perms_allow'],
$rawPerms['general_perms_deny']
)
],
[
'section' => 'manage-emotes',
'title' => 'Can manage emoticons.',
'perm' => MSZ_PERM_GENERAL_MANAGE_EMOTICONS,
2018-07-10 23:24:00 +02:00
'value' => manage_perms_value(
MSZ_PERM_GENERAL_MANAGE_EMOTICONS,
2018-07-10 23:24:00 +02:00
$rawPerms['general_perms_allow'],
$rawPerms['general_perms_deny']
)
],
[
'section' => 'manage-settings',
'title' => 'Can manage general Misuzu settings.',
'perm' => MSZ_PERM_GENERAL_MANAGE_SETTINGS,
2018-07-10 23:24:00 +02:00
'value' => manage_perms_value(
MSZ_PERM_GENERAL_MANAGE_SETTINGS,
2018-07-10 23:24:00 +02:00
$rawPerms['general_perms_allow'],
$rawPerms['general_perms_deny']
)
],
[
'section' => 'tester',
'title' => 'Can use experimental features.',
'perm' => MSZ_PERM_GENERAL_TESTER,
'value' => manage_perms_value(
MSZ_PERM_GENERAL_TESTER,
$rawPerms['general_perms_allow'],
$rawPerms['general_perms_deny']
)
],
2018-07-10 23:24:00 +02:00
],
],
2018-07-08 21:24:59 +02:00
[
'section' => 'user',
'title' => 'User',
'perms' => [
[
'section' => 'edit-profile',
'title' => 'Can edit own profile.',
'perm' => MSZ_PERM_USER_EDIT_PROFILE,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_USER_EDIT_PROFILE,
2018-07-08 21:24:59 +02:00
$rawPerms['user_perms_allow'],
$rawPerms['user_perms_deny']
),
],
[
'section' => 'change-avatar',
'title' => 'Can change own avatar.',
'perm' => MSZ_PERM_USER_CHANGE_AVATAR,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_USER_CHANGE_AVATAR,
2018-07-08 21:24:59 +02:00
$rawPerms['user_perms_allow'],
$rawPerms['user_perms_deny']
),
],
2018-09-16 21:02:22 +02:00
[
'section' => 'change-background',
'title' => 'Can change own background.',
'perm' => MSZ_PERM_USER_CHANGE_BACKGROUND,
'value' => manage_perms_value(
MSZ_PERM_USER_CHANGE_BACKGROUND,
$rawPerms['user_perms_allow'],
$rawPerms['user_perms_deny']
),
],
2018-09-21 16:45:17 +02:00
[
'section' => 'edit-about',
'title' => 'Can change own about section.',
'perm' => MSZ_PERM_USER_EDIT_ABOUT,
'value' => manage_perms_value(
MSZ_PERM_USER_EDIT_ABOUT,
$rawPerms['user_perms_allow'],
$rawPerms['user_perms_deny']
),
],
2018-07-08 21:24:59 +02:00
[
'section' => 'manage-users',
'title' => 'Can manage other users.',
'perm' => MSZ_PERM_USER_MANAGE_USERS,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_USER_MANAGE_USERS,
2018-07-08 21:24:59 +02:00
$rawPerms['user_perms_allow'],
$rawPerms['user_perms_deny']
),
],
[
'section' => 'manage-roles',
'title' => 'Can manage roles.',
'perm' => MSZ_PERM_USER_MANAGE_ROLES,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_USER_MANAGE_ROLES,
2018-07-08 21:24:59 +02:00
$rawPerms['user_perms_allow'],
$rawPerms['user_perms_deny']
),
],
[
'section' => 'manage-perms',
'title' => 'Can manage permissions.',
'perm' => MSZ_PERM_USER_MANAGE_PERMS,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_USER_MANAGE_PERMS,
2018-07-08 21:24:59 +02:00
$rawPerms['user_perms_allow'],
$rawPerms['user_perms_deny']
),
],
[
'section' => 'manage-reports',
'title' => 'Can handle reports.',
'perm' => MSZ_PERM_USER_MANAGE_REPORTS,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_USER_MANAGE_REPORTS,
2018-07-08 21:24:59 +02:00
$rawPerms['user_perms_allow'],
$rawPerms['user_perms_deny']
),
],
[
'section' => 'manage-restrictions',
'title' => 'Can manage restrictions.',
'perm' => MSZ_PERM_USER_MANAGE_RESTRICTIONS,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_USER_MANAGE_RESTRICTIONS,
2018-07-08 21:24:59 +02:00
$rawPerms['user_perms_allow'],
$rawPerms['user_perms_deny']
),
],
[
'section' => 'manage-blacklistings',
'title' => 'Can manage blacklistings.',
'perm' => MSZ_PERM_USER_MANAGE_BLACKLISTS,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_USER_MANAGE_BLACKLISTS,
2018-07-08 21:24:59 +02:00
$rawPerms['user_perms_allow'],
$rawPerms['user_perms_deny']
),
],
],
],
[
'section' => 'news',
'title' => 'News',
'perms' => [
[
'section' => 'manage-posts',
'title' => 'Can manage posts.',
'perm' => MSZ_PERM_NEWS_MANAGE_POSTS,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_NEWS_MANAGE_POSTS,
2018-07-08 21:24:59 +02:00
$rawPerms['news_perms_allow'],
$rawPerms['news_perms_deny']
),
],
[
'section' => 'manage-cats',
'title' => 'Can manage catagories.',
'perm' => MSZ_PERM_NEWS_MANAGE_CATEGORIES,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_NEWS_MANAGE_CATEGORIES,
2018-07-08 21:24:59 +02:00
$rawPerms['news_perms_allow'],
$rawPerms['news_perms_deny']
),
],
2018-07-10 23:24:00 +02:00
],
],
[
'section' => 'forum',
'title' => 'Forum',
'perms' => [
2018-07-08 21:24:59 +02:00
[
2018-07-10 23:24:00 +02:00
'section' => 'manage-forums',
'title' => 'Can manage forum sections.',
'perm' => MSZ_PERM_FORUM_MANAGE_FORUMS,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_FORUM_MANAGE_FORUMS,
2018-07-10 23:24:00 +02:00
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
)
],
],
],
[
'section' => 'comments',
'title' => 'Comments',
'perms' => [
[
'section' => 'create',
'title' => 'Can post comments.',
'perm' => MSZ_PERM_COMMENTS_CREATE,
2018-07-10 23:24:00 +02:00
'value' => manage_perms_value(
MSZ_PERM_COMMENTS_CREATE,
2018-07-10 23:24:00 +02:00
$rawPerms['comments_perms_allow'],
$rawPerms['comments_perms_deny']
2018-07-08 21:24:59 +02:00
),
],
[
2018-07-10 23:24:00 +02:00
'section' => 'edit-own',
'title' => 'Can edit own comments.',
'perm' => MSZ_PERM_COMMENTS_EDIT_OWN,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_COMMENTS_EDIT_OWN,
2018-07-10 23:24:00 +02:00
$rawPerms['comments_perms_allow'],
$rawPerms['comments_perms_deny']
),
],
[
'section' => 'edit-any',
'title' => 'Can edit anyone\'s comments.',
'perm' => MSZ_PERM_COMMENTS_EDIT_ANY,
2018-07-10 23:24:00 +02:00
'value' => manage_perms_value(
MSZ_PERM_COMMENTS_EDIT_ANY,
2018-07-10 23:24:00 +02:00
$rawPerms['comments_perms_allow'],
$rawPerms['comments_perms_deny']
),
],
[
'section' => 'delete-own',
'title' => 'Can delete own comments.',
'perm' => MSZ_PERM_COMMENTS_DELETE_OWN,
2018-07-10 23:24:00 +02:00
'value' => manage_perms_value(
MSZ_PERM_COMMENTS_DELETE_OWN,
2018-07-10 23:24:00 +02:00
$rawPerms['comments_perms_allow'],
$rawPerms['comments_perms_deny']
2018-07-08 21:24:59 +02:00
),
],
[
2018-07-10 23:24:00 +02:00
'section' => 'delete-any',
'title' => 'Can delete anyone\'s comments.',
'perm' => MSZ_PERM_COMMENTS_DELETE_ANY,
2018-07-10 23:24:00 +02:00
'value' => manage_perms_value(
MSZ_PERM_COMMENTS_DELETE_ANY,
2018-07-10 23:24:00 +02:00
$rawPerms['comments_perms_allow'],
$rawPerms['comments_perms_deny']
),
],
[
'section' => 'pin',
2018-07-08 21:24:59 +02:00
'title' => 'Can pin comments.',
'perm' => MSZ_PERM_COMMENTS_PIN,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_COMMENTS_PIN,
2018-07-10 23:24:00 +02:00
$rawPerms['comments_perms_allow'],
$rawPerms['comments_perms_deny']
2018-07-08 21:24:59 +02:00
),
],
2018-07-26 20:24:16 +02:00
[
'section' => 'lock',
'title' => 'Can lock comment threads.',
'perm' => MSZ_PERM_COMMENTS_LOCK,
2018-07-26 20:24:16 +02:00
'value' => manage_perms_value(
MSZ_PERM_COMMENTS_LOCK,
2018-07-26 20:24:16 +02:00
$rawPerms['comments_perms_allow'],
$rawPerms['comments_perms_deny']
),
],
2018-08-07 00:19:35 +02:00
[
'section' => 'vote',
'title' => 'Can like or dislike comments.',
'perm' => MSZ_PERM_COMMENTS_VOTE,
2018-08-07 00:19:35 +02:00
'value' => manage_perms_value(
MSZ_PERM_COMMENTS_VOTE,
2018-08-07 00:19:35 +02:00
$rawPerms['comments_perms_allow'],
$rawPerms['comments_perms_deny']
),
],
2018-07-08 21:24:59 +02:00
],
],
[
'section' => 'changelog',
'title' => 'Changelog',
'perms' => [
[
'section' => 'manage-changes',
'title' => 'Can manage changes.',
'perm' => MSZ_PERM_CHANGELOG_MANAGE_CHANGES,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_CHANGELOG_MANAGE_CHANGES,
2018-07-08 21:24:59 +02:00
$rawPerms['changelog_perms_allow'],
$rawPerms['changelog_perms_deny']
),
],
[
'section' => 'manage-tags',
'title' => 'Can manage tags.',
'perm' => MSZ_PERM_CHANGELOG_MANAGE_TAGS,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_CHANGELOG_MANAGE_TAGS,
2018-07-08 21:24:59 +02:00
$rawPerms['changelog_perms_allow'],
$rawPerms['changelog_perms_deny']
),
],
[
'section' => 'manage-actions',
'title' => 'Can manage action types.',
'perm' => MSZ_PERM_CHANGELOG_MANAGE_ACTIONS,
2018-07-08 21:24:59 +02:00
'value' => manage_perms_value(
MSZ_PERM_CHANGELOG_MANAGE_ACTIONS,
2018-07-08 21:24:59 +02:00
$rawPerms['changelog_perms_allow'],
$rawPerms['changelog_perms_deny']
),
],
],
],
];
}
2018-08-26 03:46:33 +02:00
function manage_forum_perms_list(array $rawPerms): array
{
return [
[
'section' => 'forum',
'title' => 'Forum',
'perms' => [
[
'section' => 'can-list',
'title' => 'Can see the forum listed, but not access it.',
'perm' => MSZ_FORUM_PERM_LIST_FORUM,
'value' => manage_perms_value(
MSZ_FORUM_PERM_LIST_FORUM,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-view',
'title' => 'Can view and access the forum.',
'perm' => MSZ_FORUM_PERM_VIEW_FORUM,
'value' => manage_perms_value(
MSZ_FORUM_PERM_VIEW_FORUM,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-create-topic',
'title' => 'Can create topics.',
'perm' => MSZ_FORUM_PERM_CREATE_TOPIC,
'value' => manage_perms_value(
MSZ_FORUM_PERM_CREATE_TOPIC,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-delete-topic',
'title' => 'Can delete topics (required a post delete permission).',
'perm' => MSZ_FORUM_PERM_DELETE_TOPIC,
'value' => manage_perms_value(
MSZ_FORUM_PERM_DELETE_TOPIC,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-move-topic',
'title' => 'Can move topics between forums.',
'perm' => MSZ_FORUM_PERM_MOVE_TOPIC,
'value' => manage_perms_value(
MSZ_FORUM_PERM_MOVE_TOPIC,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-lock-topic',
'title' => 'Can lock topics.',
'perm' => MSZ_FORUM_PERM_LOCK_TOPIC,
'value' => manage_perms_value(
MSZ_FORUM_PERM_LOCK_TOPIC,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-sticky-topic',
'title' => 'Can make topics sticky.',
'perm' => MSZ_FORUM_PERM_STICKY_TOPIC,
'value' => manage_perms_value(
MSZ_FORUM_PERM_STICKY_TOPIC,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-announce-topic',
'title' => 'Can make topics announcements.',
'perm' => MSZ_FORUM_PERM_ANNOUNCE_TOPIC,
'value' => manage_perms_value(
MSZ_FORUM_PERM_ANNOUNCE_TOPIC,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-global-announce-topic',
'title' => 'Can make topics global announcements.',
'perm' => MSZ_FORUM_PERM_GLOBAL_ANNOUNCE_TOPIC,
'value' => manage_perms_value(
MSZ_FORUM_PERM_GLOBAL_ANNOUNCE_TOPIC,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-create-post',
'title' => 'Can make posts (reply only, if create topic is disallowed).',
'perm' => MSZ_FORUM_PERM_CREATE_POST,
'value' => manage_perms_value(
MSZ_FORUM_PERM_CREATE_POST,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-edit-post',
'title' => 'Can edit their own posts.',
'perm' => MSZ_FORUM_PERM_EDIT_POST,
'value' => manage_perms_value(
MSZ_FORUM_PERM_EDIT_POST,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-edit-any-post',
'title' => 'Can edit any posts.',
'perm' => MSZ_FORUM_PERM_EDIT_ANY_POST,
'value' => manage_perms_value(
MSZ_FORUM_PERM_EDIT_ANY_POST,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-delete-post',
'title' => 'Can delete own posts.',
'perm' => MSZ_FORUM_PERM_DELETE_POST,
'value' => manage_perms_value(
MSZ_FORUM_PERM_DELETE_POST,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
[
'section' => 'can-delete-any-post',
'title' => 'Can delete any posts.',
'perm' => MSZ_FORUM_PERM_DELETE_ANY_POST,
'value' => manage_perms_value(
MSZ_FORUM_PERM_DELETE_ANY_POST,
$rawPerms['forum_perms_allow'],
$rawPerms['forum_perms_deny']
),
],
],
],
];
}