Exemple #1
0
// ########################################################################
// ######################### START MAIN SCRIPT ############################
// ########################################################################
print_cp_header($vbphrase['project_permissions']);
if (empty($_REQUEST['do'])) {
    $_REQUEST['do'] = 'list';
}
$issuetype_options = array();
$types = $db->query_read("\n\tSELECT *\n\tFROM " . TABLE_PREFIX . "pt_issuetype\n\tORDER BY displayorder\n");
while ($type = $db->fetch_array($types)) {
    $issuetype_options["{$type['issuetypeid']}"] = $vbphrase["issuetype_{$type['issuetypeid']}_singular"];
}
// ########################################################################
if ($_POST['do'] == 'update') {
    $vbulletin->input->clean_array_gpc('r', array('usergroupid' => TYPE_UINT, 'projectid' => TYPE_UINT, 'permissions' => TYPE_ARRAY, 'ugpermissions' => TYPE_ARRAY_UINT, 'original' => TYPE_ARRAY, 'revert' => TYPE_ARRAY_UINT, 'force' => TYPE_ARRAY_UINT));
    $vbulletin->pt_bitfields = build_project_bitfields();
    require_once DIR . '/includes/functions_misc.php';
    // figure out what the permission columns are,
    // so we can put in entries for any groups that don't have permissions
    $default_perms = array();
    $perm_fields = $db->query_read("\n\t\tSHOW COLUMNS FROM " . TABLE_PREFIX . "pt_projectpermission\n\t\tLIKE '%permissions'\n\t");
    while ($perm_field = $db->fetch_array($perm_fields)) {
        $default_perms[str_replace('permissions', '', $perm_field['Field'])] = 0;
    }
    if ($vbulletin->GPC['projectid']) {
        $projecttype_options = $db->query_read("\n\t\t\tSELECT *\n\t\t\tFROM " . TABLE_PREFIX . "pt_projecttype\n\t\t\tWHERE projectid = " . $vbulletin->GPC['projectid']);
        $issuetype_options = array();
        while ($issuetype = $db->fetch_array($projecttype_options)) {
            $issuetype_options["{$issuetype['issuetypeid']}"] = $vbphrase["issuetype_{$issuetype['issuetypeid']}_singular"];
        }
    }
/**
* Builds a cache of users into the datastore who meet a criteria.
* Accessed as [projectid][issuetypeid][userid] => username.
*
* @param	String	Name of the datastore item to update
* @param	String	Function to callback to see if a particular usergroup matches
*
* @return	array	Users who met the criteria
*/
function build_pt_user_list($name, $callback)
{
    global $db, $vbulletin;
    build_project_permissions();
    build_project_bitfields();
    $userlist = array();
    $usergroups = array();
    $usergroup_list = $db->query_read("\r\n\t\tSELECT usergroupid\r\n\t\tFROM " . TABLE_PREFIX . "usergroup\r\n\t");
    while ($usergroup = $db->fetch_array($usergroup_list)) {
        $usergroups[] = $usergroup['usergroupid'];
    }
    $projects = $db->query_read("\r\n\t\tSELECT projectid\r\n\t\tFROM " . TABLE_PREFIX . "pt_project\r\n\t\tORDER BY projectid\r\n\t");
    while ($project = $db->fetch_array($projects)) {
        $projectid = $project['projectid'];
        $userlist["{$projectid}"] = array();
        $project_types = array();
        $project_types_query = $db->query_read("\r\n\t\t\tSELECT projecttype.issuetypeid\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_projecttype AS projecttype\r\n\t\t\tWHERE projecttype.projectid = {$project['projectid']}\r\n\t\t");
        while ($project_type = $db->fetch_array($project_types_query)) {
            $project_types[] = $project_type['issuetypeid'];
        }
        foreach ($project_types as $issuetypeid) {
            $userlisttype = array();
            foreach ($usergroups as $usergroupid) {
                if (function_exists($callback) and call_user_func($callback, $usergroupid, $projectid, $issuetypeid)) {
                    $userlisttype[] = $usergroupid;
                }
            }
            $userlist["{$projectid}"]["{$issuetypeid}"] = array();
            if (!$userlisttype) {
                continue;
            }
            $users = $db->query_read("\r\n\t\t\t\tSELECT user.userid, user.username\r\n\t\t\t\tFROM " . TABLE_PREFIX . "user AS user\r\n\t\t\t\tINNER JOIN " . TABLE_PREFIX . "usergroup AS usergroup ON (user.usergroupid = usergroup.usergroupid)\r\n\t\t\t\tWHERE (user.usergroupid IN (" . implode(',', $userlisttype) . ")\r\n\t\t\t\t\tOR FIND_IN_SET(" . implode(', user.membergroupids) OR FIND_IN_SET(', $userlisttype) . ", user.membergroupids))\r\n\t\t\t\t\tAND (usergroup.genericoptions & " . $vbulletin->bf_ugp_genericoptions['isnotbannedgroup'] . ")\r\n\t\t\t\tORDER BY user.username\r\n\t\t\t");
            while ($user = $db->fetch_array($users)) {
                $userlist["{$projectid}"]["{$issuetypeid}"]["{$user['userid']}"] = $user['username'];
            }
        }
    }
    build_datastore($name, serialize($userlist), 1);
    return $userlist;
}