2009-07-10, 06:14 AM
I actually didn't post a fix but I guess I could.
Here is a rewritten admin/modules/forums/management.php
Use at your own risk but I have tested it pretty well.
Here are the 2 replacement functions.
SQA please review them. This will basically make the forum moderator an additionalgroup. It takes into account if a member is already in additionalgroup 6. If member is a forum moderator for two forums and is removed from one they will remain in additionalgroup 6.
Thank you...I hope my changes get committed.
Here is a rewritten admin/modules/forums/management.php
Use at your own risk but I have tested it pretty well.
Here are the 2 replacement functions.
if($mybb->input['action'] == "deletemod")
{
$plugins->run_hooks("admin_forum_management_deletemod");
$query = $db->simple_select("moderators", "*", "uid='{$mybb->input['uid']}' AND fid='{$mybb->input['fid']}'");
$mod = $db->fetch_array($query);
// Does the forum not exist?
if(!$mod['mid'])
{
flash_message($lang->error_invalid_moderator, 'error');
admin_redirect("index.php?module=forum/management&fid=".$mybb->input['fid']);
}
// User clicked no
if($mybb->input['no'])
{
admin_redirect("index.php?module=forum/management&fid=".$mybb->input['fid']);
}
if($mybb->request_method == "post")
{
$mid = $mod['mid'];
$query = $db->query("
SELECT m.*, u.username, u.usergroup, u.additionalgroups
FROM ".TABLE_PREFIX."moderators m
LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=m.uid)
WHERE m.mid='{$mid}'
");
$mod = $db->fetch_array($query);
$db->delete_query("moderators", "mid='{$mid}'");
$query = $db->simple_select("moderators", "*", "uid='{$mod['uid']}'");
if($db->num_rows($query) == 0)
{
$additionalgroups = explode(",", $mod['additionalgroups']);
if (!in_array("6", $additionalgroups));
foreach($additionalgroups as $key => $value) {
if ($value == "6") unset($additionalgroups[$key]);
}
$additionalgroups = implode(",", $additionalgroups);
$updatequery = array(
"additionalgroups" => $additionalgroups
);
$db->update_query("users", $updatequery, "uid='{$mod['uid']}' AND usergroup != '4' AND usergroup != '3'");
}
$cache->update_moderators();
$plugins->run_hooks("admin_forum_management_deletemod_commit");
$forum = get_forum($mybb->input['fid']);
// Log admin action
log_admin_action($mod['uid'], $mod['username'], $forum['fid'], $forum['name']);
flash_message($lang->success_moderator_deleted, 'success');
admin_redirect("index.php?module=forum/management&fid=".$mybb->input['fid']."#tab_moderators");
}
else
{
$page->output_confirm_action("index.php?module=forum/management&action=deletemod&fid={$mod['fid']}&uid={$mod['uid']}", $lang->confirm_moderator_deletion);
}
}
elseif($mybb->input['add'] == "moderators")
{
$forum = get_forum($fid);
if(!$forum)
{
flash_message($lang->error_invalid_forum, 'error');
admin_redirect("index.php?module=forum/management&fid={$fid}#tab_moderators");
}
$query = $db->simple_select("users", "uid, username, usergroup, additionalgroups", "username='".$db->escape_string($mybb->input['username'])."'", array('limit' => 1));
$user = $db->fetch_array($query);
if($user['uid'])
{
$query = $db->simple_select("moderators", "uid", "uid='".$user['uid']."' AND fid='".$fid."'", array('limit' => 1));
$mod = $db->fetch_array($query);
if(!$mod['uid'])
{
$new_mod = array(
"fid" => $fid,
"uid" => $user['uid'],
"caneditposts" => 1,
"candeleteposts" => 1,
"canviewips" => 1,
"canopenclosethreads" => 1,
"canmanagethreads" => 1,
"canmovetononmodforum" => 1
);
$mid = $db->insert_query("moderators", $new_mod);
$additionalgroups = explode(",", $user['additionalgroups']);
if(!in_array("6", $additionalgroups))
{
$additionalgroups[] = "6";
}
$additionalgroups = trim(implode(",", $additionalgroups), ",");
$groupupdate = array("additionalgroups" => $additionalgroups);
$db->update_query("users", $groupupdate, "uid='{$user['uid']}'");
$cache->update_moderators();
$plugins->run_hooks("admin_forum_management_start_moderators_commit");
// Log admin action
log_admin_action('addmod', $new_mod['fid'], $user['username'], $fid, $forum['name']);
flash_message($lang->success_moderator_added, 'success');
admin_redirect("index.php?module=forum/management&action=editmod&mid={$mid}");
}
else
{
flash_message($lang->error_moderator_already_added, 'error');
admin_redirect("index.php?module=forum/management&fid={$fid}#tab_moderators");
}
}
else
{
flash_message($lang->error_moderator_not_found, 'error');
admin_redirect("index.php?module=forum/management&fid={$fid}#tab_moderators");
}
}
SQA please review them. This will basically make the forum moderator an additionalgroup. It takes into account if a member is already in additionalgroup 6. If member is a forum moderator for two forums and is removed from one they will remain in additionalgroup 6.
Thank you...I hope my changes get committed.