} else { error($lang->error_invalidusername); } } elseif ($mybb->input['action'] == "do_joinrequests" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->get_input('my_post_key')); if ($groupleader['canmanagerequests'] == 0) { error_no_permission(); } $plugins->run_hooks("managegroup_do_joinrequests_start"); $uidin = null; if (is_array($mybb->get_input('request', MyBB::INPUT_ARRAY))) { $uidin = array(); foreach ($mybb->get_input('request', MyBB::INPUT_ARRAY) as $uid => $what) { if ($what == "accept") { join_usergroup($uid, $gid); $uidin[] = (int) $uid; } elseif ($what == "decline") { $uidin[] = (int) $uid; } } } if (is_array($uidin) && !empty($uidin)) { $uids = implode(",", $uidin); $db->delete_query("joinrequests", "uid IN ({$uids}) AND gid='{$gid}'"); } $plugins->run_hooks("managegroup_do_joinrequests_end"); redirect("managegroup.php?gid={$gid}", $lang->join_requests_moderated); } elseif ($mybb->input['action'] == "joinrequests") { $users = ""; $plugins->run_hooks("managegroup_joinrequests_start");
$plugins->run_hooks("usercp_usergroups_join_group"); redirect("usercp.php?action=usergroups", $lang->joined_group); } } // Accepting invitation if ($mybb->get_input('acceptinvite', MyBB::INPUT_INT)) { // Verify incoming POST request verify_post_check($mybb->get_input('my_post_key')); $usergroup = $usergroups[$mybb->get_input('acceptinvite', MyBB::INPUT_INT)]; if (my_strpos($ingroups, "," . $mybb->get_input('acceptinvite', MyBB::INPUT_INT) . ",") !== false) { error($lang->already_accepted_invite); } $query = $db->simple_select("joinrequests", "*", "uid='" . $mybb->user['uid'] . "' AND gid='" . $mybb->get_input('acceptinvite', MyBB::INPUT_INT) . "' AND invite='1'"); $joinrequest = $db->fetch_array($query); if ($joinrequest['rid']) { join_usergroup($mybb->user['uid'], $mybb->get_input('acceptinvite', MyBB::INPUT_INT)); $db->delete_query("joinrequests", "uid='{$mybb->user['uid']}' AND gid='" . $mybb->get_input('acceptinvite', MyBB::INPUT_INT) . "'"); $plugins->run_hooks("usercp_usergroups_accept_invite"); redirect("usercp.php?action=usergroups", $lang->joined_group); } else { error($lang->no_pending_invitation); } } // Show listing of various group related things // List of groups this user is a leader of $groupsledlist = ''; switch ($db->type) { case "pgsql": case "sqlite": $query = $db->query("\n\t\t\t\tSELECT g.title, g.gid, g.type, COUNT(DISTINCT u.uid) AS users, COUNT(DISTINCT j.rid) AS joinrequests, l.canmanagerequests, l.canmanagemembers, l.caninvitemembers\n\t\t\t\tFROM " . TABLE_PREFIX . "groupleaders l\n\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "usergroups g ON(g.gid=l.gid)\n\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "users u ON(((','|| u.additionalgroups|| ',' LIKE '%,'|| g.gid|| ',%') OR u.usergroup = g.gid))\n\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "joinrequests j ON(j.gid=g.gid AND j.uid != 0)\n\t\t\t\tWHERE l.uid='" . $mybb->user['uid'] . "'\n\t\t\t\tGROUP BY g.gid, g.title, g.type, l.canmanagerequests, l.canmanagemembers, l.caninvitemembers\n\t\t\t"); break;
if (!$user['uid']) { $errors[] = $lang->error_invalid_username; } else { // Is this user already a leader of this group? $query = $db->simple_select("groupleaders", "uid", "uid='{$user['uid']}' AND gid='{$group['gid']}'"); $existing_leader = $db->fetch_field($query, "uid"); if ($existing_leader) { $errors[] = $lang->error_already_leader; } } // No errors, insert if (!$errors) { $new_leader = array("gid" => $group['gid'], "uid" => $user['uid'], "canmanagemembers" => $mybb->get_input('canmanagemembers', MyBB::INPUT_INT), "canmanagerequests" => $mybb->get_input('canmanagerequests', MyBB::INPUT_INT), "caninvitemembers" => $mybb->get_input('caninvitemembers', MyBB::INPUT_INT)); $makeleadermember = $mybb->get_input('makeleadermember', MyBB::INPUT_INT); if ($makeleadermember == 1) { join_usergroup($user['uid'], $group['gid']); } $plugins->run_hooks("admin_user_groups_add_leader_commit"); $db->insert_query("groupleaders", $new_leader); $cache->update_groupleaders(); // Log admin action log_admin_action($user['uid'], $user['username'], $group['gid'], htmlspecialchars_uni($group['title'])); flash_message("{$user['username']} " . $lang->success_user_made_leader, 'success'); admin_redirect("index.php?module=user-groups&action=leaders&gid={$group['gid']}"); } else { // Errors, show leaders page $mybb->input['action'] = "leaders"; } } // Show a listing of group leaders if ($mybb->input['action'] == "leaders") {
/** * MyBB 1.4 * Copyright © 2008 MyBB Group, All Rights Reserved * * Website: http://www.mybboard.net * License: http://www.mybboard.net/about/license * * $Id: promotions.php 4535 2009-11-25 06:23:38Z RyanGordon $ */ function task_promotions($task) { global $mybb, $db, $lang, $cache; // Iterate through all our promotions $query = $db->simple_select("promotions", "*", "enabled = '1'"); while ($promotion = $db->fetch_array($query)) { $and = ""; $sql_where = ""; // Based on the promotion generate criteria for user selection $requirements = explode(',', $promotion['requirements']); if (in_array('postcount', $requirements) && intval($promotion['posts']) >= 0 && !empty($promotion['posttype'])) { $sql_where .= "{$and}postnum {$promotion['posttype']} '{$promotion['posts']}'"; $and = " AND "; } if (in_array('reputation', $requirements) && intval($promotion['reputations']) >= 0 && !empty($promotion['reputationtype'])) { $sql_where .= "{$and}reputation {$promotion['reputationtype']} '{$promotion['reputations']}'"; $and = " AND "; } if (in_array('timeregistered', $requirements) && intval($promotion['registered']) > 0 && !empty($promotion['registeredtype'])) { switch ($promotion['registeredtype']) { case "hours": $regdate = $promotion['registered'] * 60 * 60; break; case "days": $regdate = $promotion['registered'] * 60 * 60 * 24; break; case "weeks": $regdate = $promotion['registered'] * 60 * 60 * 24 * 7; case "months": $regdate = $promotion['registered'] * 60 * 60 * 24 * 30; break; case "years": $regdate = $promotion['registered'] * 60 * 60 * 24 * 365; break; default: $regdate = $promotion['registered'] * 60 * 60 * 24; } $sql_where .= "{$and}regdate <= '" . (TIME_NOW - $regdate) . "'"; $and = " AND "; } if (!empty($promotion['originalusergroup']) && $promotion['originalusergroup'] != '*') { $sql_where .= "{$and}usergroup IN ({$promotion['originalusergroup']})"; $and = " AND "; } if (!empty($promotion['newusergroup'])) { $sql_where .= "{$and}usergroup != '{$promotion['newusergroup']}'"; $and = " AND "; } $sql_where .= "{$and}lastactive >= '{$task['lastrun']}'"; $uid = array(); $log_inserts = array(); if ($promotion['usergrouptype'] == "secondary") { $usergroup_select = "additionalgroups"; } else { $usergroup_select = "usergroup"; } $query2 = $db->simple_select("users", "uid,{$usergroup_select}", $sql_where); while ($user = $db->fetch_array($query2)) { // super admin check? if ($usergroup_select == "additionalgroups") { $log_inserts[] = array('pid' => $promotion['pid'], 'uid' => $user['uid'], 'oldusergroup' => $user['additionalgroups'], 'newusergroup' => $promotion['newusergroup'], 'dateline' => TIME_NOW, 'type' => "secondary"); } else { $log_inserts[] = array('pid' => $promotion['pid'], 'uid' => $user['uid'], 'oldusergroup' => $user['usergroup'], 'newusergroup' => $promotion['newusergroup'], 'dateline' => TIME_NOW, 'type' => "primary"); } $uids[] = $user['uid']; if ($usergroup_select == "additionalgroups") { if (join_usergroup($user['uid'], $promotion['newusergroup']) === false) { // Did the user already have the additional usergroup? array_pop($log_inserts); array_pop($uids); } } if (count($uids) % 20 == 0) { if ($usergroup_select == "usergroup") { $db->update_query("users", array('usergroup' => $promotion['newusergroup']), "uid IN(" . implode(",", $uids) . ")"); } if (!empty($log_inserts)) { $db->insert_query_multiple("promotionlogs", $log_inserts); } $uids = array(); $log_inserts = array(); } } if (count($uids) > 0) { if ($usergroup_select == "usergroup") { $db->update_query("users", array('usergroup' => $promotion['newusergroup']), "uid IN(" . implode(",", $uids) . ")"); } if (!empty($log_inserts)) { $db->insert_query_multiple("promotionlogs", $log_inserts); } $uids = array(); $log_inserts = array(); } } $cache->update_moderators(); add_task_log($task, $lang->task_promotions_ran); }
admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}"); } if ($mybb->input['action'] == "join_requests") { $plugins->run_hooks("admin_user_groups_join_requests_start"); $query = $db->simple_select("usergroups", "*", "gid='" . intval($mybb->input['gid']) . "'"); $group = $db->fetch_array($query); if (!$group['gid'] || $group['type'] != 4) { flash_message($lang->error_invalid_user_group, 'error'); admin_redirect("index.php?module=user-groups"); } if ($mybb->request_method == "post" && is_array($mybb->input['users'])) { $uid_in = implode(",", array_map('intval', $mybb->input['users'])); if (isset($mybb->input['approve'])) { foreach ($mybb->input['users'] as $uid) { $uid = intval($uid); join_usergroup($uid, $group['gid']); } // Log admin action log_admin_action("approve", htmlspecialchars_uni($group['title']), $group['gid']); $message = $lang->success_selected_requests_approved; } else { // Log admin action log_admin_action("deny", htmlspecialchars_uni($group['title']), $group['gid']); $message = $lang->success_selected_requests_denied; } $plugins->run_hooks("admin_user_groups_join_requests_commit"); // Go through and delete the join requests from the database $db->delete_query("joinrequests", "uid IN ({$uid_in}) AND gid='{$group['gid']}'"); flash_message($message, 'success'); admin_redirect("index.php?module=user-groups&action=join_requests&gid={$group['gid']}"); }
/** Add a new member to the group */ public function add_member($uid) { // Set display group $member = new GroupMember($this->mybb, $this->db, $this->cache); if ($member->initialize($uid)) { $user = $member->get_info(); // If they are a pm of their old group, they won't be now! $this->demote_member($uid); // If they are in a group currently, remove it from additional leave_usergroup($user['uid'], $user['displaygroup']); // add new to additional groups join_usergroup($user['uid'], $this->info['gid']); $updatearray = array('displaygroup' => $this->info['gid'], 'group_dateline' => time()); $member->update_member($updatearray); $member->update_rank($this->info['defaultrank']); } }
} if ($mybb->input['do'] == "joingroup" && $usergroup['type'] == 4) { $reason = $db->escape_string($mybb->input['reason']); $now = TIME_NOW; $joinrequest = array("uid" => $mybb->user['uid'], "gid" => intval($mybb->input['joingroup']), "reason" => $reason, "dateline" => TIME_NOW); $db->insert_query("joinrequests", $joinrequest); $plugins->run_hooks("usercp_usergroups_join_group_request"); redirect("usercp.php?action=usergroups", $lang->group_join_requestsent); exit; } elseif ($usergroup['type'] == 4) { $joingroup = $mybb->input['joingroup']; eval("\$joinpage = \"" . $templates->get("usercp_usergroups_joingroup") . "\";"); output_page($joinpage); exit; } else { join_usergroup($mybb->user['uid'], $mybb->input['joingroup']); $plugins->run_hooks("usercp_usergroups_join_group"); redirect("usercp.php?action=usergroups", $lang->joined_group); } } // Show listing of various group related things // List of usergroup leaders $query = $db->query("\n\t\tSELECT g.*, u.username, u.displaygroup, u.usergroup\n\t\tFROM " . TABLE_PREFIX . "groupleaders g\n\t\tLEFT JOIN " . TABLE_PREFIX . "users u ON (u.uid=g.uid)\n\t\tORDER BY u.username ASC\n\t"); while ($leader = $db->fetch_array($query)) { $groupleaders[$leader['gid']][$leader['uid']] = $leader; } // List of groups this user is a leader of $groupsledlist = ''; switch ($db->type) { case "pgsql": case "sqlite":
/** * MyBB 1.8 * Copyright 2014 MyBB Group, All Rights Reserved * * Website: http://www.mybb.com * License: http://www.mybb.com/about/license * */ function task_promotions($task) { global $mybb, $db, $lang, $cache, $plugins; $usergroups = $cache->read("usergroups"); // Iterate through all our promotions $query = $db->simple_select("promotions", "*", "enabled = '1'"); while ($promotion = $db->fetch_array($query)) { // Does the destination usergroup even exist?? If it doesn't and it moves a user to it, the user will get PHP errors. if (!array_key_exists($promotion['newusergroup'], $usergroups)) { // Instead of just skipping this promotion, disable it to stop it even being selected when this task is run. $update = array("enabled" => 0); $db->update_query("promotions", $update, "pid = '" . (int) $promotion['pid'] . "'"); continue; } $and = ""; $sql_where = ""; // Based on the promotion generate criteria for user selection $requirements = explode(',', $promotion['requirements']); if (in_array('postcount', $requirements) && (int) $promotion['posts'] >= 0 && !empty($promotion['posttype'])) { $sql_where .= "{$and}postnum {$promotion['posttype']} '{$promotion['posts']}'"; $and = " AND "; } if (in_array('threadcount', $requirements) && (int) $promotion['threads'] >= 0 && !empty($promotion['threadtype'])) { $sql_where .= "{$and}threadnum {$promotion['threadtype']} '{$promotion['threads']}'"; $and = " AND "; } if (in_array('reputation', $requirements) && !empty($promotion['reputationtype'])) { $sql_where .= "{$and}reputation {$promotion['reputationtype']} '{$promotion['reputations']}'"; $and = " AND "; } if (in_array('referrals', $requirements) && (int) $promotion['referrals'] >= 0 && !empty($promotion['referralstype'])) { $sql_where .= "{$and}referrals {$promotion['referralstype']} '{$promotion['referrals']}'"; $and = " AND "; } if (in_array('warnings', $requirements) && (int) $promotion['warnings'] >= 0 && !empty($promotion['warningstype'])) { $sql_where .= "{$and}warningpoints {$promotion['warningstype']} '{$promotion['warnings']}'"; $and = " AND "; } if (in_array('timeregistered', $requirements) && (int) $promotion['registered'] > 0 && !empty($promotion['registeredtype'])) { switch ($promotion['registeredtype']) { case "hours": $regdate = $promotion['registered'] * 60 * 60; break; case "days": $regdate = $promotion['registered'] * 60 * 60 * 24; break; case "weeks": $regdate = $promotion['registered'] * 60 * 60 * 24 * 7; break; case "months": $regdate = $promotion['registered'] * 60 * 60 * 24 * 30; break; case "years": $regdate = $promotion['registered'] * 60 * 60 * 24 * 365; break; default: $regdate = $promotion['registered'] * 60 * 60 * 24; } $sql_where .= "{$and}regdate <= '" . (TIME_NOW - $regdate) . "'"; $and = " AND "; } if (in_array('timeonline', $requirements) && (int) $promotion['online'] > 0 && !empty($promotion['onlinetype'])) { switch ($promotion['onlinetype']) { case "hours": $timeonline = $promotion['online'] * 60 * 60; break; case "days": $timeonline = $promotion['online'] * 60 * 60 * 24; break; case "weeks": $timeonline = $promotion['online'] * 60 * 60 * 24 * 7; break; case "months": $timeonline = $promotion['online'] * 60 * 60 * 24 * 30; break; case "years": $timeonline = $promotion['online'] * 60 * 60 * 24 * 365; break; default: $timeonline = $promotion['online'] * 60 * 60 * 24; } $sql_where .= "{$and}timeonline <= '" . (TIME_NOW - $timeonline) . "'"; $and = " AND "; } if (!empty($promotion['originalusergroup']) && $promotion['originalusergroup'] != '*') { $sql_where .= "{$and}usergroup IN ({$promotion['originalusergroup']})"; $and = " AND "; } if (!empty($promotion['newusergroup'])) { // Skip users that are already in the new group switch ($db->type) { case "pgsql": case "sqlite": $sql_where .= "{$and}usergroup != '{$promotion['newusergroup']}' AND ','||additionalgroups||',' NOT LIKE '%,{$promotion['newusergroup']},%'"; break; default: $sql_where .= "{$and}usergroup != '{$promotion['newusergroup']}' AND CONCAT(',', additionalgroups, ',') NOT LIKE '%,{$promotion['newusergroup']},%'"; } $and = " AND "; } $uid = array(); $log_inserts = array(); if ($promotion['usergrouptype'] == "secondary") { $usergroup_select = "additionalgroups"; } else { $usergroup_select = "usergroup"; } if (is_object($plugins)) { $args = array('task' => &$task, 'promotion' => &$promotion, 'sql_where' => &$sql_where, 'and' => &$and, 'usergroup_select' => &$usergroup_select); $plugins->run_hooks('task_promotions', $args); } $query2 = $db->simple_select("users", "uid,{$usergroup_select}", $sql_where); $uids = array(); while ($user = $db->fetch_array($query2)) { if (is_super_admin($user['uid'])) { // Skip super admins continue; } // super admin check? if ($usergroup_select == "additionalgroups") { $log_inserts[] = array('pid' => $promotion['pid'], 'uid' => $user['uid'], 'oldusergroup' => $user['additionalgroups'], 'newusergroup' => $promotion['newusergroup'], 'dateline' => TIME_NOW, 'type' => "secondary"); } else { $log_inserts[] = array('pid' => $promotion['pid'], 'uid' => $user['uid'], 'oldusergroup' => $user['usergroup'], 'newusergroup' => $promotion['newusergroup'], 'dateline' => TIME_NOW, 'type' => "primary"); } $uids[] = $user['uid']; if ($usergroup_select == "additionalgroups") { if (join_usergroup($user['uid'], $promotion['newusergroup']) === false) { // Did the user already have the additional usergroup? array_pop($log_inserts); array_pop($uids); } } if (count($uids) % 20 == 0) { if ($usergroup_select == "usergroup") { $db->update_query("users", array('usergroup' => $promotion['newusergroup']), "uid IN(" . implode(",", $uids) . ")"); } if (!empty($log_inserts)) { $db->insert_query_multiple("promotionlogs", $log_inserts); } $uids = array(); $log_inserts = array(); } } if (count($uids) > 0) { if ($usergroup_select == "usergroup") { $db->update_query("users", array('usergroup' => $promotion['newusergroup']), "uid IN(" . implode(",", $uids) . ")"); } if (!empty($log_inserts)) { $db->insert_query_multiple("promotionlogs", $log_inserts); } $uids = array(); $log_inserts = array(); } } $cache->update_moderators(); add_task_log($task, $lang->task_promotions_ran); }