Example #1
0
    } 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");
Example #2
0
         $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;
Example #3
0
    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") {
Example #4
0
/**
 * 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);
}
Example #5
0
    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']}");
    }
Example #6
0
 /**
 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']);
     }
 }
Example #7
0
     }
     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":
Example #8
0
/**
 * 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);
}