mirror of
https://github.com/torrentpier/torrentpier-lts.git
synced 2025-02-28 15:10:54 +03:00
232 lines
5.9 KiB
PHP
232 lines
5.9 KiB
PHP
<?php
|
|
|
|
if (!defined('BB_ROOT')) die(basename(__FILE__));
|
|
|
|
function update_user_level ($user_id)
|
|
{
|
|
global $datastore;
|
|
|
|
if (is_array($user_id))
|
|
{
|
|
$user_id = join(',', $user_id);
|
|
}
|
|
$user_groups_in = ($user_id !== 'all') ? "AND ug.user_id IN($user_id)" : '';
|
|
$users_in = ($user_id !== 'all') ? "AND u.user_id IN($user_id)" : '';
|
|
|
|
$tmp_table = 'tmp_levels';
|
|
|
|
DB()->query("
|
|
CREATE TEMPORARY TABLE $tmp_table (
|
|
user_id MEDIUMINT NOT NULL DEFAULT '0',
|
|
user_level TINYINT NOT NULL DEFAULT '0',
|
|
PRIMARY KEY (user_id)
|
|
) ENGINE = MEMORY
|
|
");
|
|
|
|
DB()->query("
|
|
REPLACE INTO $tmp_table (user_id, user_level)
|
|
SELECT u.user_id, ". USER ."
|
|
FROM ". BB_USERS ." u
|
|
WHERE user_level NOT IN(". USER .",". ADMIN .")
|
|
$users_in
|
|
UNION
|
|
SELECT DISTINCT ug.user_id, ". GROUP_MEMBER ."
|
|
FROM ". BB_GROUPS ." g, ". BB_USER_GROUP ." ug
|
|
WHERE g.group_single_user = 0
|
|
AND ug.group_id = g.group_id
|
|
AND ug.user_pending = 0
|
|
$user_groups_in
|
|
UNION
|
|
SELECT DISTINCT ug.user_id, ". MOD ."
|
|
FROM ". BB_AUTH_ACCESS ." aa, ". BB_USER_GROUP ." ug
|
|
WHERE aa.forum_perm & ". BF_AUTH_MOD ."
|
|
AND ug.group_id = aa.group_id
|
|
AND ug.user_pending = 0
|
|
$user_groups_in
|
|
");
|
|
|
|
DB()->query("
|
|
UPDATE ". BB_USERS ." u, $tmp_table lev SET
|
|
u.user_level = lev.user_level
|
|
WHERE lev.user_id = u.user_id
|
|
AND u.user_level NOT IN(". ADMIN .")
|
|
$users_in
|
|
");
|
|
|
|
DB()->query("DROP TEMPORARY TABLE $tmp_table");
|
|
|
|
update_user_permissions($user_id);
|
|
delete_orphan_usergroups();
|
|
$datastore->update('moderators');
|
|
}
|
|
|
|
function delete_group ($group_id)
|
|
{
|
|
$group_id = (int) $group_id;
|
|
|
|
DB()->query("
|
|
DELETE ug, g, aa
|
|
FROM ". BB_USER_GROUP ." ug
|
|
LEFT JOIN ". BB_GROUPS ." g ON(g.group_id = $group_id)
|
|
LEFT JOIN ". BB_AUTH_ACCESS ." aa ON(aa.group_id = $group_id)
|
|
WHERE ug.group_id = $group_id
|
|
");
|
|
|
|
DB()->query("UPDATE " . BB_POSTS . " SET attach_rg_sig = 0, poster_rg_id = 0 WHERE poster_rg_id = ". $group_id);
|
|
|
|
update_user_level('all');
|
|
}
|
|
|
|
function add_user_into_group ($group_id, $user_id, $user_pending = 0, $user_time = TIMENOW)
|
|
{
|
|
$args = DB()->build_array('INSERT', array(
|
|
'group_id' => (int) $group_id,
|
|
'user_id' => (int) $user_id,
|
|
'user_pending' => (int) $user_pending,
|
|
'user_time' => (int) $user_time,
|
|
));
|
|
DB()->query("REPLACE INTO ". BB_USER_GROUP . $args);
|
|
|
|
if (!$user_pending)
|
|
{
|
|
update_user_level($user_id);
|
|
}
|
|
}
|
|
|
|
function delete_user_group ($group_id, $user_id)
|
|
{
|
|
DB()->query("
|
|
DELETE FROM ". BB_USER_GROUP ."
|
|
WHERE user_id = ". (int) $user_id ."
|
|
AND group_id = ". (int) $group_id ."
|
|
");
|
|
|
|
update_user_level($user_id);
|
|
}
|
|
|
|
function create_user_group ($user_id)
|
|
{
|
|
DB()->query("INSERT INTO ". BB_GROUPS ." (group_single_user) VALUES (1)");
|
|
|
|
$group_id = (int) DB()->sql_nextid();
|
|
$user_id = (int) $user_id;
|
|
|
|
DB()->query("INSERT INTO ". BB_USER_GROUP ." (user_id, group_id, user_time) VALUES ($user_id, $group_id, ". TIMENOW .")");
|
|
|
|
return $group_id;
|
|
}
|
|
|
|
function get_group_data ($group_id)
|
|
{
|
|
if ($group_id === 'all')
|
|
{
|
|
$sql = "SELECT g.*, u.username AS moderator_name, aa.group_id AS auth_mod
|
|
FROM ". BB_GROUPS ." g
|
|
LEFT JOIN ". BB_USERS ." u ON(g.group_moderator = u.user_id)
|
|
LEFT JOIN ". BB_AUTH_ACCESS ." aa ON(aa.group_id = g.group_id AND aa.forum_perm & ". BF_AUTH_MOD .")
|
|
WHERE g.group_single_user = 0
|
|
GROUP BY g.group_id
|
|
ORDER BY g.group_name";
|
|
}
|
|
else
|
|
{
|
|
$sql = "SELECT g.*, u.username AS moderator_name, aa.group_id AS auth_mod
|
|
FROM ". BB_GROUPS ." g
|
|
LEFT JOIN ". BB_USERS ." u ON(g.group_moderator = u.user_id)
|
|
LEFT JOIN ". BB_AUTH_ACCESS ." aa ON(aa.group_id = g.group_id AND aa.forum_perm & ". BF_AUTH_MOD .")
|
|
WHERE g.group_id = ". (int) $group_id ."
|
|
AND g.group_single_user = 0
|
|
LIMIT 1";
|
|
}
|
|
$method = ($group_id === 'all') ? 'fetch_rowset' : 'fetch_row';
|
|
return DB()->$method($sql);
|
|
}
|
|
|
|
function delete_permissions ($group_id = null, $user_id = null, $cat_id = null)
|
|
{
|
|
$group_id = get_id_csv($group_id);
|
|
$user_id = get_id_csv($user_id);
|
|
$cat_id = get_id_csv($cat_id);
|
|
|
|
$forums_join_sql = ($cat_id) ? "
|
|
INNER JOIN ". BB_FORUMS ." f ON(a.forum_id = f.forum_id AND f.cat_id IN($cat_id))
|
|
" : '';
|
|
|
|
if ($group_id)
|
|
{
|
|
DB()->query("DELETE a FROM ". BB_AUTH_ACCESS ." a $forums_join_sql WHERE a.group_id IN($group_id)");
|
|
}
|
|
if ($user_id)
|
|
{
|
|
DB()->query("DELETE a FROM ". BB_AUTH_ACCESS_SNAP ." a $forums_join_sql WHERE a.user_id IN($user_id)");
|
|
}
|
|
}
|
|
|
|
function store_permissions ($group_id, $auth_ary)
|
|
{
|
|
if (empty($auth_ary) || !is_array($auth_ary)) return;
|
|
|
|
$values = array();
|
|
|
|
foreach ($auth_ary as $forum_id => $permission)
|
|
{
|
|
$values[] = array(
|
|
'group_id' => (int) $group_id,
|
|
'forum_id' => (int) $forum_id,
|
|
'forum_perm' => (int) $permission,
|
|
);
|
|
}
|
|
$values = DB()->build_array('MULTI_INSERT', $values);
|
|
|
|
DB()->query("INSERT INTO ". BB_AUTH_ACCESS . $values);
|
|
}
|
|
|
|
function update_user_permissions ($user_id = 'all')
|
|
{
|
|
if (is_array($user_id))
|
|
{
|
|
$user_id = join(',', $user_id);
|
|
}
|
|
$delete_in = ($user_id !== 'all') ? " WHERE user_id IN($user_id)" : '';
|
|
$users_in = ($user_id !== 'all') ? "AND ug.user_id IN($user_id)" : '';
|
|
|
|
DB()->query("DELETE FROM ". BB_AUTH_ACCESS_SNAP . $delete_in);
|
|
|
|
DB()->query("
|
|
INSERT INTO ". BB_AUTH_ACCESS_SNAP ."
|
|
(user_id, forum_id, forum_perm)
|
|
SELECT
|
|
ug.user_id, aa.forum_id, BIT_OR(aa.forum_perm)
|
|
FROM
|
|
". BB_USER_GROUP ." ug,
|
|
". BB_GROUPS ." g,
|
|
". BB_AUTH_ACCESS ." aa
|
|
WHERE
|
|
ug.user_pending = 0
|
|
$users_in
|
|
AND g.group_id = ug.group_id
|
|
AND aa.group_id = g.group_id
|
|
GROUP BY
|
|
ug.user_id, aa.forum_id
|
|
");
|
|
}
|
|
|
|
function delete_orphan_usergroups ()
|
|
{
|
|
// GROUP_SINGLE_USER without AUTH_ACCESS
|
|
DB()->query("
|
|
DELETE g
|
|
FROM ". BB_GROUPS ." g
|
|
LEFT JOIN ". BB_AUTH_ACCESS ." aa USING(group_id)
|
|
WHERE g.group_single_user = 1
|
|
AND aa.group_id IS NULL
|
|
");
|
|
|
|
// orphan USER_GROUP (against GROUP table)
|
|
DB()->query("
|
|
DELETE ug
|
|
FROM ". BB_USER_GROUP ." ug
|
|
LEFT JOIN ". BB_GROUPS ." g USING(group_id)
|
|
WHERE g.group_id IS NULL
|
|
");
|
|
} |